gpt4 book ai didi

c++ - 自定义 Directshow 过滤器的属性页

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:35:34 25 4
gpt4 key购买 nike

我设法创建了一个自定义的 DirectShow 转换过滤器,注册它,然后将它导出到一个 DLL 中。它现在可以在 GraphEdit 和 C++ 测试程序中正常工作。我的下一个目标是创建一个自定义界面来控制过滤器的主要参数,从测试应用程序或从 GraphEdit 中的属性页。

正在关注 these instructions ,我的自定义界面从 C++ 测试程序中正常工作。但是,我在属性页方面遇到了困难:我在 GraphEdit 中不断收到错误消息“无法显示请求的属性页”。

在调试时,我发现调用的唯一方法(在我的自定义属性页类中,派生自 CBasePropertyPage)是 OnConnect()OnDisconnect() - 这是奇怪的是(或不是?)叫了两次。在这两种方法之间,对 CBasePropertyPage 方法(基类中的文件 cprop.cpp)进行了一些调用,一切看起来都很好,直到:

STDMETHODIMP CBasePropertyPage::Activate(HWND hwndParent,LPCRECT pRect,BOOL fModal)

更准确地说

m_hwnd = CreateDialogParam(g_hInst, MAKEINTRESOURCE(m_DialogId), hwndParent, DialogProc, (LPARAM) this);

我总是得到 m_hwnd 为 0,导致方法返回错误。我试图在这条指令之后添加 GetLastError(),但它总是返回 0,没有错误。此外,CreateDialogParam() 的每个参数看起来都已正确初始化...

任何帮助将不胜感激!


编辑:

现在,为了至少有一个工作示例,我使用了在 MSDN tutorial 中描述的相同 资源/模板。 .


---编辑 2---:

在进行更多调试的同时,我尝试从对话框资源中删除每一个控件(按钮、滚动条)。在那之后......一切正常。 CreateDialogParam() 返回一个正确的值,我的类的 OnActivate() 被调用等等。我最终在 GraphEdit 中得到了一个“过滤器属性”页面,但是它是空的(默认对话框窗口除外)。

但是一旦我有了控件,例如一个MF命令按钮,出现之前的问题。

DirectShow 基类和我使用的控件之间是否存在任何类型的不兼容? (如果是这样,为什么提供的示例没有提及任何内容?)是否有更简单的方法向属性页添加控件?

(我绝对不是 GUI 和 Win32 控件的专家...)

最佳答案

看起来问题出在我为属性页创建控件的方式上。我使用一个简单的“Formview”资源,但我试图通过图形资源查看器(或任何你想调用它的方式)添加控件:右键单击,“插入 ActiveX 控件...”并使用“Microsoft Form 2.0” .

使用带有普通旧 Win32 控件的 Formview 资源(使用 CreateWindowEx() 初始化并使用经典消息循环管理),一切正常。

非常感谢您的帮助!

关于c++ - 自定义 Directshow 过滤器的属性页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4994017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com