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

首先要把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);面没跟任何语句,那么这个按钮消息运行完,释放对象,这就是为什么不能在按钮函数里面局部定义对象

转载于:https://www.cnblogs.com/ct0421/p/3492693.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值