自己的对话框不处理wm_close的时候,CWnd也没有做任何处理。为什么可以关闭对话框???_AFXWIN_INLINE void CWnd::OnClose()
{ Default(); }BEGIN_MESSAGE_MAP(CddDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()

//ON_WM_CLOSE()END_MESSAGE_MAP()
中没有处理wm_close,
我在CWnd::Onclose这里设置断点了,结果没有进入。
但是对话框关闭了,说明, 关闭对话框还有其他途径,只是没有从CWnd::OnClose里进入

解决方案 »

  1.   

    //ON_WM_CLOSE()这不是注释掉了么
      

  2.   


    但是对话框关闭了,说明, 关闭对话框还有其他途径,只是没有从CWnd::OnClose里进入
    但是对话框关闭了,说明, 关闭对话框还有其他途径,只是没有从CWnd::OnClose里进入但是对话框关闭了,说明, 关闭对话框还有其他途径,只是没有从CWnd::OnClose里进入
    \
    但是对话框关闭了,说明, 关闭对话框还有其他途径,只是没有从CWnd::OnClose里进入
    你会看问题吗?
      

  3.   

    真正关闭对话框窗口的是OnOk和Oncancel,重写虚函数OnCancel,然后不调用基类的实现,这时候就关闭不了窗口了。当然你要DestroyWindow的话上面的都可以无视。
      

  4.   


    不对吧,sdk api写对话框不是这样的吧那个时候还没有oncancel, onok呢?所以:你不用担心某个消息没有被处理,总有接着它的地方。
      

  5.   

    这里讨论的当然是MFC,MFC只不过是对win32做了层封装,调试OnOK和OnCancel跟进去,就会发现最终关闭对话框的是EndDialog。而EndDialog内部肯定又调用了DestoryWindow(调试下大概能猜出来,destorywindow会产生一个WM_DESTORYWONDOW消息,这个消息是在Endialog执行后响应的),说到底销毁一个窗口(无论什么窗口)都是通过DestoryWindow来实现的。
      

  6.   

    mfc非常诡异的, 我记得,当重写onclose这个函数,如果没有在这个函数关闭对话框,那么oncancel会被调用。  这个oncancel不能仅仅当做一个按钮的消息响应函数来看。不点击cancel这个按钮, oncacel都有可能会被调用。mfc设计的真是
      

  7.   

    额,我只是认为WM_CLOSE是关闭的时候触发的一个消息。如果你把映射关闭,只能说明关闭的时候不触发这个消息。因为主要目的是关闭的时候想做点事情。这个应该是顺时流程,如果有映射的情况下,流程走到这里,你把消息截获了,返回,那么流程中断,不进行关闭了。相反,如果你关闭映射,就根本没这个流程。映射应该是改变了流程。个人理解,可能不对,仅供参考。
      

  8.   

    关闭映射这个消息可能被APP类处理了,如果这个消息不做任何处理,主窗口是不会关闭的,比如pretranslatemessage截取WM_CLOSE,然后return true丢掉这个消息,不管你有没有映射,窗口都不会关闭,所以我觉得应该是被APP类给处理了,
    如果有映射那就对话框处理,默认会调用基类的实现,如果把基类的实现也丢掉(注释掉),窗口也不会关闭。
    个人理解,可能不对,仅供参考。