步骤 4: 创建属性页
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media 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。
本教程的其余部分将介绍其中每种方法。
相关主题