您的位置:程序门 -> vc/mfc -> 界面



为什么我用create()创建的对话框只能弹出一次,第二次弹出就会出错?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


为什么我用create()创建的对话框只能弹出一次,第二次弹出就会出错?[已结贴,结贴人:politeness1983]
发表于:2008-01-10 14:11:56 楼主
如题,请问是什么原因呢?是不是关闭了之后没有释放什么内存?
发表于:2008-01-10 14:21:531楼 得分:0
代码贴来看看
发表于:2008-01-10 14:22:322楼 得分:0
先看代码
发表于:2008-01-10 14:55:393楼 得分:10
因为你create出来的是无模式对话框
点关闭后,并没有destroywindow,你可以重载onok函数
在函数中destroywindow(),并去掉cdialog::onok();
发表于:2008-01-10 15:50:214楼 得分:10
模态对话框点击ok后不是销毁对话框,而是将其隐藏;

而无模态对话框默认的onok函数也只是适合模态对话框,所以在创建无模态对话框时,你必须手动重写onok函数,去掉它默认的cdialog::onok();函数,并且调用它的destroywindow函数将其销毁。

这样解释您明白了吧?
发表于:2008-01-10 20:36:295楼 得分:0
补充一种情况,无论是模式,还是非模式,有全局变量cimagelist   m_imagelist;
之后在cxxxdialog::oninitdialog()下有
{
..    
m_imagelist.create(...);//这样第二弹出对话框就会出错,解决办法是析构时删除imagelist或是create之前判断,已有句柄则先删除后创建
}

说明:无论是对话框还是其它的窗口或是其它的..,在创建时,都应该先判断下,if(窗口/xx句柄==null)那么才create
发表于:2008-01-10 22:15:336楼 得分:0
估计你的对话框类里面有cbutton之类的成员变量,这种变量在oninitdialog里面用代码创建的,你必须在ondestroy里面也用代码destroywindow这些子窗口,否则对话框关闭后这些子窗口变量里面的窗口句柄不是null,下次再执行oninitdialog里面的create时将得到断言失败。


快速检索

最新资讯
热门点击