一个关于创建非模态对话框的问题

首先要把CD2 dlg;写成全局,因为button这个函数是一次性运行,运行完CD2 dlg这个资源就销毁了,导致点击以对话框一闪而过,可以写在cpp的include的下面
其次if(!dlg.m_hWnd) 的情况下才dlg.Create(IDD_DIALOG2,this);
否则第一次可以正常弹出,第二次点的时候必然报错,因为不能重复create
不需要dlg.Detach();
据我所知这个函数用来切断对象和窗口的关系,所以,不合适吧
总结下代码应该是这样的
CD2 dlg;放全局
if(!dlg.m_hWnd)
{dlg.Create(IDD_DIALOG2,this);}
dlg.ShowWindow(SW_SHOW);
另外再啰嗦几句,非模态跟模态有这很大的区别,模态对话框的话dlg.Domodal();运行到这里主对话框会停下,运行弹出对话框,直到弹出的对话框结束,主对话框再继续,所以模态对话框的对象不需要全局,放在按钮相应函数里就可以了,另外面加dlg.Detach();也可以,只是没必要,它自己就会执行
但是非模态对话框就不一样了,走到dlg.ShowWindow(SW_SHOW);这里弹出对话框的同时主对话框也继续运行,面跟着dlg.Detach();的话就直接非法操作。而如果dlg.ShowWindow(SW_SHOW);面没跟任何语句,那么这个按钮消息运行完,释放对象,这就是为什么不能在按钮函数里面局部定义对象
posted @ 2013-12-26 16:43  FREE小宝  阅读(430)  评论(0编辑  收藏  举报