从标准控件派生出控件

与任何 CWnd 派生类一样,可以通过从现有控件类派生新类来修改控件的行为。

创建派生控件类

  1. 从现有控件类派生类,也可选择重写 Create 成员函数,以便为基类 Create 函数提供必需的自变量。

  2. 提供消息处理程序成员函数和消息映射条目,以修改控件的行为以响应特定的 Windows 消息。 请参阅 将消息映射到函数

  3. 提供新的成员函数以扩展控件的功能(可选)。

在对话框中使用派生控件需要额外的工作。 对话框中控件的类型和位置通常在对话框模板资源中指定。 如果创建派生控件类,则无法在对话模板中指定它,因为资源编译器对派生类一无所知。

在对话框中放置派生控件

  1. 在派生对话类的声明中嵌入派生控件类的对象。

  2. 重写对话框类中的 OnInitDialog 成员函数以为派生控件调用 SubclassDlgItem 成员函数。

SubclassDlgItem 动态地将从对话框模板创建的控件子类化。 当控件动态子类化时,你会挂接到 Windows,在自己的应用程序中处理一些消息,然后将其余消息传递到 Windows。 有关详细信息,请参阅 MFC 参考中的类CWndSubclassDlgItem 成员函数。 以下示例展示如何编写OnInitDialog的重写以调用SubclassDlgItem

BOOL CSubDialog::OnInitDialog()
{
   CDialog::OnInitDialog();

   m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);

   return TRUE;
}

由于派生控件嵌入到对话类中,因此在构造对话框时将构造该控件,在销毁对话框时将销毁该控件。 将此代码与 “按手添加控件”中的示例进行比较。

另请参阅

创建和使用控件
控件