与任何 CWnd 派生类一样,可以通过从现有控件类派生新类来修改控件的行为。
创建派生控件类
从现有控件类派生类,并选择性地重写
Create
成员函数,以便为基类Create
函数提供必要的参数。提供消息处理程序成员函数和消息映射条目,以修改控件的行为以响应特定的 Windows 消息。 请参阅 将消息映射到函数。
提供新的成员函数以扩展控件的功能(可选)。
在对话框中使用派生控件需要额外的工作。 对话框中控件的类型和位置通常在对话框模板资源中指定。 如果创建派生控件类,则无法在对话模板中指定它,因为资源编译器对派生类一无所知。
将派生控件放置在对话框中
在派生对话类的声明中嵌入派生控件类的对象。
OnInitDialog
重写对话类中的成员函数以调用SubclassDlgItem
派生控件的成员函数。
SubclassDlgItem
从对话框模板创建的控件“动态子类”。 当控件动态子类化时,你会挂接到 Windows,在自己的应用程序中处理一些消息,然后将其余消息传递到 Windows。 有关详细信息,请参阅 MFC 参考中的类CWnd
的 SubclassDlgItem 成员函数。 以下示例演示如何编写对调用SubclassDlgItem
的OnInitDialog
替代:
BOOL CSubDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);
return TRUE;
}
由于派生控件嵌入到对话类中,因此在构造对话框时将构造该控件,在销毁对话框时将销毁该控件。 将此代码与 “按手添加控件”中的示例进行比较。