非模态对话框
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); 展开
pNoModalDlg->Create(IDD_DIALOG2,this);
pNoModalDlg->ShowWindow(SW_SHOW);
为什么只有用这种形式才可以显示出来,为什么要声明成堆对象呢?
为什么下面这种方式不行呢?
CNoModalDlg dlg;
dlg.Create(IDD_DIALOG2,this);
dlg.ShowWindow(SW_SHOW); 展开
1个回答
展开全部
第二种方法下,dlg是临时变量,当代码所在函数执行完毕,临时变量dlg被释放,当然就不显示了。
第一种,dlg作为指针,在程序堆中是有效的,因此即使函数执行完毕,该内存空间依然有效。
第一种,dlg作为指针,在程序堆中是有效的,因此即使函数执行完毕,该内存空间依然有效。
追问
创建模态对话框
CMyModalDlg dlg;
dlg.DoModal();
是因为模态对话框不响应父窗口消息,所以函数没结束,就可以申请临时变量?
追答
模态,对父窗口是|“中断”模式的,也就是,函数没有退出。但这个和不响应父窗口消息的因果关系,是因为中断,所以不响应,而不是你理解的相反。
而非模态,是“抛出”模式的,ShowWindow之后继续执行,函数就退出了,不影响父窗口的消息执行。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询