我在显示一个对话框时使用DoModal()正常,使用ShowWindow(SW_SHOW)时则出现"Debug Assertion Failed",怎什么回事?谢谢!

解决方案 »

  1.   

    先CreateDialog,然后再ShowWindow。
      

  2.   

    在显示非模态对话框时(比如你在一个对话框的OK键点击时显示另外一个对话框,m_dlg为父类对话框的成员):
    void OnOK()
    {
        m_dlg.Create(IDD_TEMP, this);
        m_dlg.ShowWindow(SW_SHOW);
    }
      

  3.   

    如果是模态对话框,那么当DoModule函数返回时,对话框已经关闭,窗口句柄失效,再ShowWindow不就是Assert嘛。DoModule函数执行时要等到对话框关闭后才返回的。
      

  4.   

    DoModal()会创建对话框,OK该对话框就不再存在,再用ShowWindow自然要出错。
    正确用法:
    1:在OnInitDialog() 中
       m_dlg.Create(IDD_TEMP, this);
       m_dlg.ShowWindow(SW_HIDE);
    2. 要显示时:m_dlg.ShowWindow(SW_SHOW);
       不显示时:m_dlg.ShowWindow(SW_HIDE);
      

  5.   

    你需要将对话框隐藏吗?不需要的话就什么都不用做,直接响应菜单操作调用DoModule就可以了不用ShowWindow;需要的话看你对效果的要求程度有不同的办法,不过没有直接的办法。
      

  6.   

    直接调用DoModal(),对话框虽然关闭了,但它里面的成员变量依然能够应用的说。