假如我有3个对话框Dialog1,Dialog2,Dialog3.
每个对话框中都有getInstance()操作。
程序启动后,先是Dialog1, 当我点击OK时,在Dialog1中使用类似的 Dialog2::getInstance()->DoModal().
,当我在Dialog2中点击OK时,关闭Dialog1,Dialog2,然后Dialog3::getInstance()->DoModal()。
这是画面只有Dialog3了,此时点击关闭,然后Dialog2::getInstance()->DoModal().
结果挂了。我跟踪断点,发现在Dialog3中启动Dialog2时,Dialog2的窗口句柄是有效的(在getInstance()中,还没有DoModal呢),就是说,在Dialog2中,关闭时并没有真正关闭它自己,这是为什么?
Dialog2关闭操作。this->EndDialog(0);

解决方案 »

  1.   

    EndDialog确实不会销毁窗口,原因是通常对话框是用来接受一系列输入的,在DoModal之后通常还会调用GetDlgItem(IDC_XXX)->GetWindowText()来取得输入。
      

  2.   

    如果我关闭窗口用 this->DestroyWindow。倒是可以关闭,窗口句柄为空了,可是即便是那样,也无法在用DoModal来生成窗口。
    该如何做呢?
      

  3.   

    1楼说法错误,正好相反,在DoModal之后不允许调用GetDlgItem(IDC_XXX)-> GetWindowText()来取得输入,否则出错。楼主的问题是“在Dialog2中点击OK时,关闭Dialog1,Dialog2,然后Dialog3::getInstance()->DoModal()”,那么这整个过程是在一个函数中的,而实际上Dialog2还没有从DoModal()退出。你可以不关闭而只隐藏Dialog2。