从标准控件派生控件

与使用任何 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;
}

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

另请参阅

创建和使用控件
Controls