MFC模态与非模态对话框

模态:在该窗口弹出后,会阻塞应用程序的窗口,使其不可操作;

非模态:不会阻塞应用程序的窗口,两者可独立操作 

模态对话框

功能:点击提示框按钮弹出新建的对话框

1.导入新对话框类

 

 

个人认为最好在主对话框的头文件中导入

 

  

2. 

复制代码
void CmfctestDlg::OnBnClickedButton1() //提示框按钮
{
    
    CmyDialog dlg;//创建新建对话框类的实例
    dlg.DoModal();//弹出对话框--模态
    

}
复制代码

 

示例工程下载:链接:https://pan.baidu.com/s/1UVVZoD0doh6jL18rQPuQQQ       提取码:6666      

 

非模态对话框

容易犯的错误 

 

 创建的对话框会一闪而过:原因dlg是局部变量(在栈中申请的内存),对话框显示后,按钮函数OnBnClickedButton1马上结束,dlg被销毁了

正确方法

dlg对话框在堆中申请内存即可

方法一:全局变量

 

 

到这一步:运行程序,第一次点击运行 正常,关闭后 第二次点击会 弹出错误对话框

原因:每次单击都会调用 Create函数,该函数是初始化函数,会创建一个非模态对话框(一个对象只对应一个对话框,即一个对象只初始化一次),多次调用 Create 函数会导致程序崩掉

解决办法把 Create函数 放到主窗口类的初始化函数中,就不会重复创建

 

 

 

 示例工程下载:

链接:https://pan.baidu.com/s/1aiUGSmRxTcfUR8uidTNKkw        提取码:6666    

  

 

方法二:new

 

 

 

 

出现的问题与全局变量类似

 

 

方法三:malloc

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   天子骄龙  阅读(172)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-11-20 ptotoshop-图片透明处理
2020-11-20 photoshop--目录
2019-11-20 葫芦丝教程
点击右上角即可分享
微信分享提示

目录导航