请问各位大侠们:
我在VC++,框架类里定义了一个对话框类的成员变量dlg,
用如下语句显示:
dlg.Creat(IDD_DIALOG1,this);
dlg.ShowWindow(SW_SHOW);
其中IDD_DIALOG1为所作对话框的句柄.
但是第一次显示正常,关闭对话框,重新点按钮希望再打开就错误了.请问这是什么?
我用另一种方法,就是定义一个动态指针对象,然后在框架类的析构函数中释放,那样就一切正常,即使同时打开多个对话框也没有问题.
但是第一种方法为什么不行呢?我查了MSDN也没有结果.有哪位大侠遇到过这个问题的话,请帮忙指教啊,不胜感激.

解决方案 »

  1.   

    1.IDD_DIALOG1不是对话框的句柄,是资源ID。
    2.dlg.Creat是什么时候调用的?有没有重复调用的问题?
    3.你所说的另一种方法,其运行路线可能和这个有很大不同。所以,另一种方法正常和这种方法不正常没有丝毫关系。
    4.MSDN?你怎么查的?
      

  2.   

    在DEBUG下运行,产生问题的原因应该是断言失败!可以查看void AFXAPI AfxHookWindowCreate(CWnd* pWnd)
    ASSERT(pWnd->m_hWnd == NULL);   // only do once  //就是这句断言失败了!
    因为你用成员变量来保存. 第二次双击时,就在上述语句处断言失败了.
    你可以在RELEASE试下,肯定是不会弹错误的.
      

  3.   

    问题是重复调用了dlg.Creat(IDD_DIALOG1,this); 嘿嘿
      

  4.   

    问题应该在于你的对话框类里面还有一个非模板的窗口变量,比如CButton之类的,这类窗口往往是在OnInitDialog中用代码创建的,在对话框关闭的时候也应该用代码来DestroyWindow,否则模式对话框关闭后这个变量窗口并没有被Destroy,下次重新打开模式对话框时又会重新创建这个子窗口,导致断言错误。
      

  5.   

    我明白了,哈哈,谢谢各位.
    其实本质是由于非模态窗口关闭时只是隐藏,窗口并没有销毁的缘故.当第二次再想显示时就是重复调用了
    dlg.Creat(IDD_DIALOG1,this);