CBasePropertyPage 类
该 CBasePropertyPage
类是用于实现属性页的抽象类。 如果要编写支持属性页的筛选器 (或其他对象) ,请使用此类。
受保护的成员变量 | 说明 |
---|---|
m_bDirty | 指示任何属性是否已更改。 |
m_DialogId | 对话框的资源标识符。 |
m_Dlg | 对话框窗口的句柄。 |
m_hwnd | 对话框窗口的句柄。 |
m_pPageSite | 指向属性页网站的 IPropertyPageSite 接口的指针。 |
m_TitleId | 包含对话框标题的字符串的资源标识符。 |
公共方法 | 说明 |
CBasePropertyPage | 构造函数方法。 |
~CBasePropertyPage | 析构函数方法。 虚拟。 |
OnActivate | 激活属性页时调用。 虚拟。 |
OnApplyChanges | 当用户将更改应用于属性页时调用。 虚拟。 |
OnConnect | 提供指向与属性页关联的对象的 IUnknown 指针。 虚拟。 |
OnDeactivate | 在销毁对话框窗口时调用。 虚拟。 |
OnDisconnect | 当属性页应释放关联的对象时调用。 虚拟。 |
OnReceiveMessage | 当对话框收到消息时调用。 虚拟。 |
IPropertyPage 方法 | 说明 |
激活 | 创建对话框窗口。 |
应用 | 将当前属性值应用于与属性页关联的对象 |
关闭 | 销毁对话框窗口。 |
GetPageInfo | 检索有关属性页的信息。 |
帮助 | 调用属性页帮助。 |
IsPageDirty | 指示属性页自激活以来是否已更改,还是自最近调用 IPropertyPage::Apply 以来已更改。 |
移动 | 定位并调整对话框的大小。 |
SetObjects | 为与属性页关联的对象提供 IUnknown 指针。 |
SetPageSite | 初始化属性页。 |
显示 | 显示或隐藏对话框。 |
TranslateAccelerator | 指示属性页处理击键。 |
备注
属性页是 COM 对象,因此必须为类标识符生成 GUID, (CLSID) 并提供 CFactoryTemplate 数组中的条目。 有关详细信息,请参阅DirectShow和 COM。 以下示例演示典型的类工厂条目:
CFactoryTemplate g_Templates[] =
{
{
L"My Property Page",
&CLSID_MyPropPage,
CMyProp::CreateInstance,
NULL,
NULL
},
/* Also include the template for your filter (not shown). */
};
筛选器必须公开 ISpecifyPropertyPages 接口。 此接口包含单个方法 GetPages,该方法返回属性页的 CLSID。 以下示例演示如何实现此方法:
STDMETHODIMP CMyFilter::GetPages(CAUUID *pPages)
{
if (!pPages) return E_POINTER;
pPages->cElems = 1;
pPages->pElems = reinterpret_cast<GUID*>(CoTaskMemAlloc(sizeof(GUID)));
if (pPages->pElems == NULL)
{
return E_OUTOFMEMORY;
}
*(pPages->pElems) = CLSID_MyPropPage;
return S_OK;
}
还记得替代筛选器的 NonDelegatingQueryInterface 方法。 有关详细信息,请参阅DirectShow和 COM 和INonDelegatingUnknown。
接下来,在项目中创建对话作为资源,并创建一个保存对话框标题的字符串资源。 这两个资源 ID 都是 CBasePropertyPage 构造函数的参数。 将标题字符串保留在资源中可以更轻松地本地化属性页。
CBasePropertyPage 类提供 IPropertyPage 接口的框架。 此框架调用许多虚拟方法,包括 CBasePropertyPage::OnActivate、 CBasePropertyPage::OnApplyChanges 等。 在基类中,这些方法只需返回S_OK。 派生类需要重写其中一些或全部虚拟方法。 有关详细信息,请参阅各个方法的备注。
有关如何使用此类创建属性页的扩展示例,请参阅 “创建筛选器属性页”。
要求
要求 | Value |
---|---|
标头 |
|
库 |
|