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. 选择字符串表末尾的空白行并键入字符串的文本或标题:例如,“其他属性页”。

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

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

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

  5. 对 ID 重复步骤 3 和步骤 4,对标题使用 IDS_SAMPLE_ADDPPG_CAPTION 和“附加属性页”。

  6. 在。新属性页类的 CPP 文件(在此示例中) CAddtlPropPage修改 CAddtlPropPage::CAddtlPropPageFactory::UpdateRegistry IDS_SAMPLE_ADDPAGE由 AfxOleRegisterPropertyPageClass 传递,如以下示例所示:

    BOOL CAddtlPropPage::CAddtlPropPageFactory::UpdateRegistry(BOOL bRegister)
    {
       if (bRegister)
          return AfxOleRegisterPropertyPageClass(AfxGetInstanceHandle(),
             m_clsid, IDS_SAMPLE_ADDPAGE);
       else
          return AfxOleUnregisterClass(m_clsid, NULL);
    }
    
  7. 修改构造函数,以便将IDS_SAMPLE_ADDPPG_CAPTION传递给COlePropertyPage构造函数CAddtlPropPage,如下所示:

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

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

另请参阅

MFC ActiveX 控件