2011-02-14 69 views
2

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

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描述模板。


--- EDIT 2 ---

在调试多一点点,我试图删除从对话框资源的每一个控制(按钮,滚动条)。之后......一切正常。 CreateDialogParam()返回正确的值,我们班的OnActivate()被调用等。我最终在GraphEdit中获得了“滤镜属性”页面,但是为空(除了默认的对话框窗口)。

但是,只要我有一个控制,例如一个MF命令按钮,出现以前的问题。

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

(我绝对不图形用户界面专家和Win32控制...)

+2

与MF命令按钮你的意思是MFC?然后AfxWinInit可能未被调用(http://msdn.microsoft.com/en-us/library/w04bs753%28v=vs.80%29.aspx)。我建议不要使用MFC控件。 – wimh 2011-02-15 16:06:02

回答

1

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

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

非常感谢您的帮助!