C++ 自定义Directshow筛选器的属性页

C++ 自定义Directshow筛选器的属性页,c++,dll,directshow,base-class,graphedit,C++,Dll,Directshow,Base Class,Graphedit,我设法创建了一个自定义DirectShow转换过滤器,注册它,并将其导出到DLL中。它现在在两个PrGHEDDIT和C++测试程序中都能正常工作。我的下一个目标是从测试应用程序或GraphEdit中的属性页创建一个自定义接口来控制过滤器的主参数 下面,我从C++测试程序中得到了自定义接口。但是,我在使用属性页时遇到了困难:我一直在GraphiEdit中收到错误消息“请求的属性页无法显示” 调试时,我发现唯一调用的方法(在我的自定义属性页类中,从CBasePropertyPage派生)是OnCon

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

下面,我从C++测试程序中得到了自定义接口。但是,我在使用属性页时遇到了困难:我一直在GraphiEdit中收到错误消息“请求的属性页无法显示”

调试时,我发现唯一调用的方法(在我的自定义属性页类中,从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)

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

任何帮助都将不胜感激


编辑

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


——编辑2---

在调试的过程中,我尝试从对话框资源中删除每个控件(按钮、滚动条)。之后。。。一切正常
CreateDialogParam()
返回正确的值,调用我的类的
OnActivate()
,依此类推。我最终在GraphEdit中得到一个“filter properties”页面,但为空(默认对话框窗口除外)

但一旦我有了一个控件,例如MF命令按钮,以前的问题就会出现

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


(我绝对不是GUI和Win32控件方面的专家…

看起来问题来自于我为属性页创建控件的方式。我使用的是一个简单的“Formview”资源,但我试图通过图形资源查看器(或任何你想叫它的东西)添加控件:右键单击“插入ActiveX控件…”,然后使用“Microsoft Form 2.0”

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


非常感谢你的帮助

使用MF命令按钮,您指的是MFC?那么可能不会调用AfxWinInit()。我建议不要使用MFC控件。对不起,在创建对话框资源时,我实际上是指ActiveX控件的建议列表中的“MicrosoftForms”模板(CommandButton等)。也许是一样的,但我不确定。如果没有MFC控件,如何创建正确的属性页?非常感谢:)除了Wimmel的评论:查看如何将MFC与DS过滤器一起使用。否则,请在属性页上使用普通的旧Win32控件。我刚刚找到了一种方法,可以在Formview中包含普通的简单Win32控件,并将其用作属性页。现在看来还可以-我会随时通知你的。不过,我稍后会尝试使用MFC。谢谢:)刚刚完成了我需要做的事情,在“FormView”资源中使用基本的Win32控件(按钮和编辑)。一切正常。我将在未来的项目中尝试使用MFC。谢谢。