1。在对话框中放了一个按钮 IDC_BUTTON,可以在对话框中响应其 Click 事件:
ON_BN_CLICKED(IDC_BUTTON, OnButton)2。从 CButton 派生了类 CEButton 并与对话框上的按钮 IDC_BUTTON 关联,可以同样的在对话框中响应其 Click 事件。3。在派生的类 CEButton 里面,响应其 Click 事件后,对话框中的原 Click 事件响应失去作用,即事件被屏蔽了。问题是:在 CEButton 类里面响应 Click 事件后,如何让其父窗口(对话框)同样接收到事件通知并响应?

解决方案 »

  1.   

    你可以直接使用GetParent获得对话框的指针,然后直接调用对话框的函数完成你想做的。
      

  2.   

    也许你可以使用GetParent获得对话框的指针,然后使用:
    ::PostMessage(CDlg->GetSafeHwnd(),BN_CLICKED ,BTN_ID,this->GetsafeHwnd());BN_CLICKED 
    idButton = (int) LOWORD(wParam);    // identifier of button 
    hwndButton = (HWND) lParam;         // handle to button
      

  3.   

    你的方法可行,但我还想有没别的方法。为什么会是那样?难道是 MFC 就是那样的,还是有什么其他方面的控制?比如一个设置,我设置了就可以让事件冒泡?
      

  4.   

    上面错了,应该是:
    ::PostMessage(CDlg->GetSafeHwnd(),WM_COMMAND  ,MAKEWPARAM(IDC_BTN,BN_CLICKED),MAKELPARAM(GetSafeHwnd(),0));
      

  5.   

    添加一个普通控件,变量类型改成你的类名不就行了,click事件可以像普通控件一样添加.
      

  6.   

    好像没有看到什么设置可以满足你的条件,呵呵
    其实这些消息都是notification消息!他们是标准的消息,MFC消息映射网络中只有一个对应的消息处理函数。
      

  7.   

    同意vcleaner的方法,
    你只需要在你的子控件里向对话框发送消息即可。在一般情况下:
    As you click on each button, 
    the button sends a WM_COMMAND message to the parent window procedure。
    但你相当于自己截取了这个消息,
    因此你还想让父对话框处理就必须再把这个消息传下去。 :)