本帖最后由 boguanglingling 于 2012-08-14 09:56:44 编辑

解决方案 »

  1.   

    点击右键调用某个事件处理函数是在类的消息映射函数设置的,如下
    BEGIN_MESSAGE_MAP(CDlgLogin, CDialog)
    ON_WM_SYSCOMMAND()
    ON_BN_CLICKED(IDCANCEL, &CDlgLogin::OnBnClickedCancel)
    END_MESSAGE_MAP()
    像我的这个设置,点X的话会调用OnBnClickedCancel,但是如果我改成下面这样,就会调用另外函数OnBnClickedCancel1111
    BEGIN_MESSAGE_MAP(CDlgLogin, CDialog)
    ON_WM_SYSCOMMAND()
    ON_BN_CLICKED(IDCANCEL, &CDlgLogin::OnBnClickedCancel1111)
    END_MESSAGE_MAP()
      

  2.   

    不需要Cancel按钮,直接删掉它就可以了。
      

  3.   

    楼主的意思是:
    X和IDCANCEL已经绑定了,而不是IDCANCEL事件函数修改不了。我的方法是这样的:
    X是发送WM_CLOSE进消息队列吧
    那就到PreTranslateMessage消息里面的(MSG pMsg)
    if(pMsg->message == WM_CLOSE)
    截获消息处理吧
      

  4.   

    onCancel的处理应该是系统定义的,我并没有重写onCancel,应该不是这个问题,重写OnCancel时也不需要在消息映射中添加映射。
      

  5.   

    我把原先自带的Cancel改了ID,定义了一些操作,删掉这些操作也没有了。
      

  6.   


    嗯,X默认应该会自动调用IDCANCEL事件的,现在情况好像是没有绑定,当我重写onCancel,但没在其中添加任何代码时,点击X也不会调用OnCancel(),仍然调用的我原先修改的Cancel按钮的单击事件,应该是没绑定上.修改Cancel按钮的ID不再是IDCANCEL后不是相当于普遍按钮了?
      

  7.   

    添加WM_SYSCOMMAND的消息映射,自己处理SC_CLOSE
    OnSysCommand(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    if ( wParam == SC_CLOSE )
    dosomethings;
    }