步骤 4: 创建属性页

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

此时,筛选器支持属性页所需的一切。 下一步是实现属性页本身。 首先从 CBasePropertyPage 派生一个新类。 以下示例演示声明的一部分,包括稍后将在示例中使用的一些私有成员变量:

class CGrayProp : public CBasePropertyPage
{
private:
    ISaturation *m_pGray;    // Pointer to the filter's custom interface.
    long        m_lVal       // Store the old value, so we can revert.
    long        m_lNewVal;   // New value.
public:
    /* ... */
};

接下来,在资源编辑器中创建对话框资源,以及对话框标题的字符串资源。 字符串将显示在属性页的选项卡中。 这两个资源 ID 是 CBasePropertyPage 构造函数的参数:

CGrayProp::CGrayProp(IUnknown *pUnk) : 
  CBasePropertyPage(NAME("GrayProp"), pUnk, IDD_PROPPAGE, IDS_PROPPAGE_TITLE),
  m_pGray(0)
{ }

下图显示了示例属性页的对话框资源。

属性页对话框

现在,你已准备好实现属性页。 下面是 CBasePropertyPage 中要重写的方法:

  • 当客户端创建属性页时,将调用 OnConnect。 它将 IUnknown 指针设置为筛选器。
  • 创建对话框时将调用 OnActivate
  • 当对话框收到窗口消息时,将调用 OnReceiveMessage
  • 当用户通过单击“确定”或“应用”按钮提交属性更改时,将调用 OnApplyChanges
  • 当用户关闭属性表时,将调用 OnDisconnect

本教程的其余部分将介绍其中每种方法。

下一 步:步骤 5。存储指向筛选器的指针

创建筛选器属性页