从标准控件派生控件

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

创建派生控件类

  1. 从现有控件类派生类,并选择性地重写 Create 成员函数,以便为基类 Create 函数提供必要的参数。

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

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

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

将派生控件放置在对话框中

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

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

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

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

   m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);

   return TRUE;
}

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

另请参阅

创建和使用控件
控件