1.在SDI工程里添加了一个对话框资源IDD_DIALOG1;
2.给该对话框增加新的类CMyDlg,并在视图类里用classwizard增加成员变量CMyDlg dlg;
3.在视类的某个菜单相应函数里用create的方法来显示这个对话框IDD_DIALOG1,并在该函数末用dlg.DstroyWindow()销毁该对话框;
调试成功后点击菜单项运行成功,不关闭程序再重复点击一次该菜单项就出现错误指向:
if (m_pfnSuper != NULL)
   return ::CallWindowProc(m_pfnSuper, m_hWnd, nMsg, wParam, lParam);上网查了一下,说是create后没有销毁掉对话框,但是我明明已经用dlg.DstroyWindow()销毁了,如果我把CMyDlg dlg放在该菜单相应函数里而不是用classwizard增加,则运行时不会出现任何错误,请教高手什么原因,如何解决??
谢谢~

解决方案 »

  1.   

    你放到相应函数里面么dlg变成局部变量了,新开一个对话框跟原来对话框没相关了。
      

  2.   

    如下是菜单相应函数里的:dlg.create(IDD_DIALOG!);  //dlg是视图类中全局变量 CMyDlg dlg;
    dlg.ShowWindow(SW_SHOW);
    ...........
    dlg.DestroyWindow();
      

  3.   

    改成局部的
    -------
    试试把dlg.m_hwnd设为NULL
      

  4.   

    有点不明白
    用create创建非模态,并不阻碍程序运行
    那么
    dlg.create(IDD_DIALOG!);  //dlg是视图类中全局变量 CMyDlg dlg; 
    dlg.ShowWindow(SW_SHOW); 
    dlg.DestroyWindow();
    岂不是刚创建就销毁??
      

  5.   

    TO:shakaqrj 
    dlg.create(IDD_DIALOG!);  //dlg是视图类中全局变量 CMyDlg dlg; 
    dlg.ShowWindow(SW_SHOW); 
    ........... 
    dlg.DestroyWindow();中间的省略号是指代码部分
      

  6.   

    TO:shunruo 
    改成局部的是没问题的,我已经试过了
      

  7.   

    用全局的应该也行。只是你得添加一下代码:
    if(dlg.GetSafeHandle()!=NULL)
      dlg.DestroyWindow();
    else
     {
       dlg.create(IDD_DIALOG1);
       dlg.showwindow(sw_show);
     }
    试试吧。
      

  8.   

    Create之后不需要Destory,只要ShowWindow(SW_SHOW)和ShowWindow(SW_HIDE)就可以了。
    即使你点X之后,它也只是隐藏了,并没有Destory。