改变标准控制行为最简单的方法是使用MFC的“窗口子类”的特性,例如:
1 在对话框中定位一个编辑控制,ID为IDC_EDIT1
2 编写一个新的CEdit的派生类,类名为CNonNumberEdit。对它
的WM_CHAR消息进行映射,编写如下代码
void CNonNumberEdit::OnChar(UNIT nChar,.......)
{
if(!isdigit(nChar))
{
CEdit::OnChar(nchar,...);
}
}
3 按如下方式在对话框类或窗体视图类的头文件中为类CNonNumberEdit声明一个数据成员
private:
CNonNumberEdit m_nonNumberEdit;
4 如果当前所处理的是对话框类,重载OnInitDialog函数,加代码
m_nonNumberEdit.SubclassDlgItem(IDC_EDIT1,this);
5 如果是窗体视图类,重载OnInitalUpdate
if(m_nonNumberEdit.m_hwnd==NULL)
{
m_nonNumberEdit.SubclassDlgItem(IDC_EDIT1,this);
}
类Cwnd::SubclassDlgItem成员函数保证了所有的消息再被发送给控制的内置窗口过程
之前都要经过应用程序框架的消息分发系统进行。被称为“动态子类”
|
|