请问各位大虾,小弟创建了一个ATL工程,然后在这个工程中添加了一个控件,现在小弟要实现在调用这个控件的某个函数中弹出一个对话框,请问如何才算是正确地往工程中添加对话框?
我是这么做的:
1、在classview里面,右击工程后选择“new ATL object”
2、选择miscellaneous中的对话框,并赋其名称为DlgSocMes,于是生成了一个继承自CAxDialogImpl的CDlgSocMes对话框类
3、在控件类中添加一个CDlgSocMes对象:dlgT,
4、在控件的构造函数中添加: dlgT.Create( NULL );
dlgT.ShowWindow( SW_SHOW );
这样做运行是没有问题的,但是程序退出的时候出现异常,提示说:
ATL: ERROR - Object deleted before window was destroyed
各位大哥帮帮忙啊!跪求!

解决方案 »

  1.   

    CDlgSocMes dlgT;
    dlgT.DoModel( );
      

  2.   

    zfive5:
    DoModal()可以,程序可以正常显示和关闭。不过小弟还有个麻烦,我不需要窗体显示出来,我主要用这个窗体进行消息传递。我在使用socket的时候,需要传递一些accept,connect等消息,所以借用一个这个窗体的消息机制转发到一个由外部设定的消息窗口中去。所以dlgT最好还是不要显示出来。为什么我用
    dlgT.Create( NULL );
    dlgT.ShowWindow( SW_SHOW );
    这样子,程序就会在dlgT的析构函数中出错呢。
      

  3.   

    搞定了!
    ATL非模态对话框调用与MFC对话框不同,首先要Create,然后ShowWindow,用完后必需调用它的DestroyWindow成员函数,如果未调用则报
    ATL: ERROR - Object deleted before window was destroyed