非模态对话框

CNoModalDlg*pNoModalDlg=newCNoModalDlg();pNoModalDlg->Create(IDD_DIALOG2,this);pNoMod... CNoModalDlg *pNoModalDlg = new CNoModalDlg();
pNoModalDlg->Create(IDD_DIALOG2,this);
pNoModalDlg->ShowWindow(SW_SHOW);
为什么只有用这种形式才可以显示出来,为什么要声明成堆对象呢?

为什么下面这种方式不行呢?
CNoModalDlg dlg;
dlg.Create(IDD_DIALOG2,this);
dlg.ShowWindow(SW_SHOW);
展开
 我来答
bhtzu
2014-03-15 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4225万
展开全部
第二种方法下,dlg是临时变量,当代码所在函数执行完毕,临时变量dlg被释放,当然就不显示了。
第一种,dlg作为指针,在程序堆中是有效的,因此即使函数执行完毕,该内存空间依然有效。
追问
创建模态对话框
CMyModalDlg dlg;
dlg.DoModal();
是因为模态对话框不响应父窗口消息,所以函数没结束,就可以申请临时变量?
追答
模态,对父窗口是|“中断”模式的,也就是,函数没有退出。但这个和不响应父窗口消息的因果关系,是因为中断,所以不响应,而不是你理解的相反。
而非模态,是“抛出”模式的,ShowWindow之后继续执行,函数就退出了,不影响父窗口的消息执行。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式