1。在对话框中放了一个按钮 IDC_BUTTON,可以在对话框中响应其 Click 事件:
ON_BN_CLICKED(IDC_BUTTON, OnButton)2。从 CButton 派生了类 CEButton 并与对话框上的按钮 IDC_BUTTON 关联,可以同样的在对话框中响应其 Click 事件。3。在派生的类 CEButton 里面,响应其 Click 事件后,对话框中的原 Click 事件响应失去作用,即事件被屏蔽了。问题是:在 CEButton 类里面响应 Click 事件后,如何让其父窗口(对话框)同样接收到事件通知并响应?
ON_BN_CLICKED(IDC_BUTTON, OnButton)2。从 CButton 派生了类 CEButton 并与对话框上的按钮 IDC_BUTTON 关联,可以同样的在对话框中响应其 Click 事件。3。在派生的类 CEButton 里面,响应其 Click 事件后,对话框中的原 Click 事件响应失去作用,即事件被屏蔽了。问题是:在 CEButton 类里面响应 Click 事件后,如何让其父窗口(对话框)同样接收到事件通知并响应?
::PostMessage(CDlg->GetSafeHwnd(),BN_CLICKED ,BTN_ID,this->GetsafeHwnd());BN_CLICKED
idButton = (int) LOWORD(wParam); // identifier of button
hwndButton = (HWND) lParam; // handle to button
::PostMessage(CDlg->GetSafeHwnd(),WM_COMMAND ,MAKEWPARAM(IDC_BTN,BN_CLICKED),MAKELPARAM(GetSafeHwnd(),0));
其实这些消息都是notification消息!他们是标准的消息,MFC消息映射网络中只有一个对应的消息处理函数。
你只需要在你的子控件里向对话框发送消息即可。在一般情况下:
As you click on each button,
the button sends a WM_COMMAND message to the parent window procedure。
但你相当于自己截取了这个消息,
因此你还想让父对话框处理就必须再把这个消息传下去。 :)