MFC ActiveX 控件:添加另一自定义属性页

有时,ActiveX 控件所具有的属性会超过一个属性页上可以合理容纳的属性。 在这种情况下,可以将属性页添加到 ActiveX 控件以显示这些属性。

本文讨论将新属性页添加到已至少有一个属性页的 ActiveX 控件。 有关添加常用属性页(字体、图片或颜色)的详细信息,请参阅 MFC ActiveX 控件:使用常用属性页一文。

以下过程使用 ActiveX 控件向导创建的示例 ActiveX 控件框架。 因此,类名和标识符对于此示例是唯一的。

有关使用 ActiveX 控件中属性页的详细信息,请参阅以下文章:

在项目中插入新属性页模板

  1. 打开控件项目后,可在项目工作区中打开资源视图。

  2. 右键单击资源视图以打开快捷菜单,然后单击“添加资源”

  3. 展开“对话框”节点,然后选择“IDD_OLE_PROPPAGE_SMALL”

  4. 单击“新建”以将资源添加到项目

  5. 选择新属性页模板以刷新“属性”窗口(在“资源视图”中)

  6. 为“ID”属性输入新值。 此示例使用 IDD_PROPPAGE_NEWPAGE

  7. 单击工具栏上的“保存”。

将新模板与类关联

  1. 打开类视图。

  2. 右键单击类视图以打开快捷菜单。

  3. 在快捷菜单中,依次单击“添加”和“添加类”

    这会打开“添加类”对话框。

  4. 双击“MFC 类”模板。

  5. MFC 类向导的“类名”框中,键入新对话框类的名称。 (在此示例中为 CAddtlPropPage。)

  6. 如果要更改文件名,请单击“更改”。 键入实现和头文件的名称,或接受默认名称。

  7. 在“基类”框中,选择 COlePropertyPage

  8. 在“对话框 ID”框中,选择“IDD_PROPPAGE_NEWPAGE”

  9. 单击“完成”以创建类。

若要允许控件的用户访问此新属性页,请对控件的属性页 ID 宏部分(位于控件实现文件中)进行以下更改:

BEGIN_PROPPAGEIDS(CMyAxUICtrl, 2)
   PROPPAGEID(CMyAxUIPropPage::guid)
   PROPPAGEID(CAddtlPropPage::guid)
END_PROPPAGEIDS(CMyAxUICtrl)

请注意,必须将 BEGIN_PROPPAGEIDS 宏的第二个参数(属性页计数)从 1 增加到 2。

还必须修改控件实现文件(.CPP 文件)以包含新属性页类的头文件 (.H)。

下一步涉及创建两个新字符串资源,它们会为新属性页提供类型名称和标题。

向属性页添加新字符串资源

  1. 在打开控件项目后,打开“资源视图”。

  2. 双击“字符串表”文件夹,然后双击要向其添加字符串的现有字符串表资源

    这会在窗口中打开该字符串表。

  3. 选择该字符串表末尾的空白行并键入字符串的文本或标题:例如“Additional Property Page”。

    这会打开“字符串属性”页,其中显示“标题”和“ID”框。 “标题”框包含键入的字符串

  4. 在“ID”框中,选择或键入字符串的 ID。 在完成后按 Enter。

    此示例对新属性页的类型名称使用 IDS_SAMPLE_ADDPAGE

  5. 重复步骤 3 和 4(将 IDS_SAMPLE_ADDPPG_CAPTION 用于 ID,将“Additional Property Page”用于标题)

  6. 在新属性页类的 .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);
    }
    
  7. 修改 CAddtlPropPage 的构造函数,以便将 IDS_SAMPLE_ADDPPG_CAPTION 传递给 COlePropertyPage 构造函数,如下所示:

    CAddtlPropPage::CAddtlPropPage() :
       COlePropertyPage(IDD, IDS_SAMPLE_ADDPPG_CAPTION)
    {
    
    }
    

完成所需修改后,重新生成项目,并使用测试容器测试新属性页。 请参阅 使用测试容器测试属性和事件 了解有关如何访问测试容器的信息。

另请参阅

MFC ActiveX 控件