我想实现销毁一个对话框A后,立即显示出另一个对话框B
于是我就:if (dlgA.IsWindowVisible())
{
dlgA.PostMessage(WM_CLOSE,0,0); // 在这加了断点1

dlgB.ShowWindow(true);void CADlg::OnClose()
{
CDialog::OnClose(); //在这也加了断点2停在断点1后,F10。可为什么不是到断点2处,而是继续往下到dlgB.ShowWindow(true);这个地方?
dlgA.PostMessage(WM_CLOSE,0,0); 这个代码不就是调用CDialog::OnClose(); 的么?

解决方案 »

  1.   

    吧PostMessage换成SendMessage试一试!
      

  2.   


    if (dlgA.IsWindowVisible())
    {
        dlgA.PostQuitMessage(WM_QUIT); 

    dlgB.ShowWindow(true);
    试一下
      

  3.   

    1.PostMessage只是消息进入执行队列,并不立即执行。SendMessage是要求立即执行返回。所以F10继续向下走是有可能的
    2.OnClose是怎么映射过来的,你没有其它菜单/按钮之类的映射到OnClose上。另外,在对话框中你跟踪OnDestroy更有效,是必然执行的,OnClose多数的时候你按窗口右上角的小叉时,会响应这个函数。
      

  4.   

    1PostMessage只是消息进入执行队列,并不立即执行。SendMessage是要求立即执行返回。所以F10继续向下走是有可能的 
    2.OnClose是怎么映射过来的,你没有其它菜单/按钮之类的映射到OnClose上。另外,在对话框中你跟踪OnDestroy更有效,是必然执行的,OnClose多数的时候你按窗口右上角的小叉时,会响应这个函数。