模态对话框与非模态对话框
对话框分别模态对话框与非模态对话框
模态对话框:在该对话框显示的时候,其父窗口将暂时失效,只有在该对话框关闭以后,控件权才会交还给父窗口
非模态对话框:该窗口显示的时候,父窗口依然可以操作
对话框创建的步骤(模态对话框和非模态对话框均适用):
(1)添加一个新的对话框资源并用对话框编辑器对其进行设计
这里我在资源视图中插入了一个对话框资源,并添加了一些控件,用来实现一个简单整数加法器
(2)通过类向导对对话框资源绑定一个从CDialog派生的对话框类
具体做法:在对话框资源上单击鼠标右键选择添加类,绑定完成的类如下:
(3)适用类向导为对话框类加入与控件相关联的成员变量
在各个编辑框控件上分别单击鼠标右键选择添加变量,这里类型我都设置为了数值型,设置成控件类型也是可以的
(4)在对话框类中添加需要的消息处理函数
为相加按钮添加响应响应
1 void CMyDlg::OnBnClickedBtnAdd() 2 { 3 //将对话框上显示的数值更新到绑定的变量中 4 UpdateData(TRUE); 5 6 m_nNumSum = m_nNum1 + m_nNum2; 7 8 //将绑定的变量的数值更新到对话框上 9 UpdateData(FALSE); 10 }
(5)创建并显示对话框
模态与非模态对话框前面4步基本相同,最后创建这一步稍微有点区别
这里添加两个菜单项,一个用于创建模态对话框,一个用于生成非模态对话框
接着添加两个菜单项的消息响应
用于创建模态对话框的消息响应函数如下:
1 void CMainFrame::OnModel() 2 { 3 CMyDlg theMyDlg; //定义一个对话框对象 4 theMyDlg.DoModal(); //弹出模态对话框 5 }
用于创建非模态对话框的消息响应函数如下:
首先需要在框架类中添加一个CMyDlg类的成员变量m_MyDlg
1 void CMainFrame::OnModelless() 2 { 3 if (!m_MyDlg.m_hWnd) 4 { 5 m_MyDlg.Create(IDD_DIALOG1); //创建非模态对话框 6 } 7 m_MyDlg.ShowWindow(SW_SHOW); //显示非模态对话框 8 }
编译运行的效果如下: