【问题标题】:Property page for custom Directshow filter自定义 Directshow 过滤器的属性页
【发布时间】:2011-02-14 15:35:06
【问题描述】:

我设法创建了一个自定义 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);

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

任何帮助将不胜感激!


编辑

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


---编辑 2--- :

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

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

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

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

【问题讨论】:

  • 带MF命令按钮的意思是MFC?然后可能不会调用 AfxWinInit (msdn.microsoft.com/en-us/library/w04bs753%28v=vs.80%29.aspx)。我建议不要使用 MFC 控件。
  • 对不起 - 我实际上是指“Microsoft Forms”模板(CommandButton 等),在创建对话框资源时建议的 ActiveX 控件列表中。也许这是同一件事,但我不确定。如何在没有 MFC 控件的情况下创建正确的属性页?非常感谢:)
  • 除了 Wimmel 的评论:查看blog.monogram.sk/janos/2008/01/10/… 了解如何将 MFC 与 DS 过滤器一起使用。否则,请在属性页上使用普通的旧 Win32 控件。
  • 我刚刚找到了一种将简单的 Win32 控件包含在我将用作 PropertyPage 的 Formview 中的方法。现在看起来没问题 - 我会及时通知你。不过,我稍后会尝试使用 MFC。谢谢:)
  • 刚刚完成了我需要做的事情,在“FormView”资源中使用基本的 Win32 控件(按钮和编辑)。一切正常。我会在未来的项目中尝试使用 MFC。非常感谢。

标签: c++ dll directshow base-class graphedit


【解决方案1】:

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

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

非常感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    相关资源
    最近更新 更多