MFC ActiveX 控件:添加另一自定义属性页
有时,ActiveX 控件所具有的属性会超过一个属性页上可以合理容纳的属性。 在这种情况下,可以将属性页添加到 ActiveX 控件以显示这些属性。
本文讨论将新属性页添加到已至少有一个属性页的 ActiveX 控件。 有关添加常用属性页(字体、图片或颜色)的详细信息,请参阅 MFC ActiveX 控件:使用常用属性页一文。
以下过程使用 ActiveX 控件向导创建的示例 ActiveX 控件框架。 因此,类名和标识符对于此示例是唯一的。
有关使用 ActiveX 控件中属性页的详细信息,请参阅以下文章:
-
注意
强烈建议新属性页遵循 ActiveX 控件属性页的大小标准。 常用图片和颜色属性页度量 250x62 对话框单位 (DLU)。 标准字体属性页为 250x110 DLU。 ActiveX 控件向导创建的默认属性页使用 250x62 DLU 标准。
在项目中插入新属性页模板
打开控件项目后,可在项目工作区中打开资源视图。
右键单击资源视图以打开快捷菜单,然后单击“添加资源”。
展开“对话框”节点,然后选择“IDD_OLE_PROPPAGE_SMALL”。
单击“新建”以将资源添加到项目。
选择新属性页模板以刷新“属性”窗口(在“资源视图”中)。
为“ID”属性输入新值。 此示例使用 IDD_PROPPAGE_NEWPAGE。
单击工具栏上的“保存”。
将新模板与类关联
打开类视图。
右键单击类视图以打开快捷菜单。
在快捷菜单中,依次单击“添加”和“添加类”。
这会打开“添加类”对话框。
双击“MFC 类”模板。
在 MFC 类向导的“类名”框中,键入新对话框类的名称。 (在此示例中为
CAddtlPropPage
。)如果要更改文件名,请单击“更改”。 键入实现和头文件的名称,或接受默认名称。
在“基类”框中,选择
COlePropertyPage
。在“对话框 ID”框中,选择“IDD_PROPPAGE_NEWPAGE”。
单击“完成”以创建类。
若要允许控件的用户访问此新属性页,请对控件的属性页 ID 宏部分(位于控件实现文件中)进行以下更改:
BEGIN_PROPPAGEIDS(CMyAxUICtrl, 2)
PROPPAGEID(CMyAxUIPropPage::guid)
PROPPAGEID(CAddtlPropPage::guid)
END_PROPPAGEIDS(CMyAxUICtrl)
请注意,必须将 BEGIN_PROPPAGEIDS 宏的第二个参数(属性页计数)从 1 增加到 2。
还必须修改控件实现文件(.CPP 文件)以包含新属性页类的头文件 (.H)。
下一步涉及创建两个新字符串资源,它们会为新属性页提供类型名称和标题。
向属性页添加新字符串资源
在打开控件项目后,打开“资源视图”。
双击“字符串表”文件夹,然后双击要向其添加字符串的现有字符串表资源。
这会在窗口中打开该字符串表。
选择该字符串表末尾的空白行并键入字符串的文本或标题:例如“Additional Property Page”。
这会打开“字符串属性”页,其中显示“标题”和“ID”框。 “标题”框包含键入的字符串。
在“ID”框中,选择或键入字符串的 ID。 在完成后按 Enter。
此示例对新属性页的类型名称使用 IDS_SAMPLE_ADDPAGE。
重复步骤 3 和 4(将 IDS_SAMPLE_ADDPPG_CAPTION 用于 ID,将“Additional Property Page”用于标题)。
在新属性页类的 .CPP 文件(在此示例中为
CAddtlPropPage
),修改CAddtlPropPage::CAddtlPropPageFactory::UpdateRegistry
,以便 AfxOleRegisterPropertyPageClass 会传递IDS_SAMPLE_ADDPAGE,如以下示例所示:BOOL CAddtlPropPage::CAddtlPropPageFactory::UpdateRegistry(BOOL bRegister) { if (bRegister) return AfxOleRegisterPropertyPageClass(AfxGetInstanceHandle(), m_clsid, IDS_SAMPLE_ADDPAGE); else return AfxOleUnregisterClass(m_clsid, NULL); }
修改
CAddtlPropPage
的构造函数,以便将 IDS_SAMPLE_ADDPPG_CAPTION 传递给COlePropertyPage
构造函数,如下所示:CAddtlPropPage::CAddtlPropPage() : COlePropertyPage(IDD, IDS_SAMPLE_ADDPPG_CAPTION) { }
完成所需修改后,重新生成项目,并使用测试容器测试新属性页。 请参阅 使用测试容器测试属性和事件 了解有关如何访问测试容器的信息。