当程序使用你自已所实现的派生控件子类时,主窗口的消息是无法到达你的子类函数的.这时,你有两个方法:
1. 使用DDX_Contrl(pDX,IDC_BUTTON,mMyButton)把你的子类与当前窗口挂接,以至于让WM_LBUTTONDOWN等消息顺利到达你的子类处理函数.
2. 或者是通过使用m_btnMyButton.SubclassDlgItem(IDC_BUTTON1,this);
或者是
CWnd* pWnd = GetDlgItem(IDC_BUTTON1);
ASSERT( pWnd && pWnd->GetSafeHwnd() );
m_btnMyButton.SubclassWindow(pWnd->GetSafeHwnd());
完成,子类化操作.
你可以在你的void CMyButton::PreSubclassWindow()函数里完成这个控件的形状,大小初始化操作.
如果这个控件包括了一个其它控件如Edit,你也可以使用以上方法把消息传递下去.
另外:当你的控件为动态创建,如:
mMyButton.Create("button",WS_VISIBLE|WS_CHILD,CRect(0,0,50,100),this,1);这种方式.
则MFC则会自动实现子类化操作