模式和无模式对话框的显示
对话框有两种类型,一种是模式对话框,另一种是无模式对话框。所谓"模式对话框"是指当对话框显示后,用户必须在对话框中作出相应的操作,在退出对话框之前,对话框所在的应用程序不能执行其他操作。所谓"无模式对话框"是指当对话框被弹出后,一直保留在屏幕上,用户可继续在应用程序中进行其它操作。
1. 模式对话框的显示
一般情况下,我们看见的对话框多数是模式对话框。下面将前面的对话框以"模式"方式来显示。
(1) 将解决方案资源管理器窗口切换到"资源视图",双击Menu下的IDR_MAINFRAME,打开Viewer中的菜单资源。
(2) 在"格式"菜单中添加一个菜单项"背景设置(&B)…",其ID设为ID_FOMAT_SET。
(3) 由于该对话框用来设置视图的背景色,因此我们需将菜单项ID_FOMAT_SET的COMMAND事件映射添加在CViewerView类中,并在映射函数CViewerView::OnFormatSet中添加显示对话框代码,如图6所示。
图6 在OnFormatSet中添加的代码
程序说明:
① 程序中, DoModal()是CDialog的成员函数,用来负责模式对话框的显示和终止。
② 当对话框显示后,只有当用户单击"确定"按钮后,系统才认定用户在对话框中的选择或输入有效,函数DoModal返回IDOK,否则DoModal返回IDCANCEL,对话框中的选择或输入无效。
③ MessageBox是一个MFC窗口类CWnd的一个成员函数,用来显示一个"消息对话框",显示指定的内容。
(4) 在类CViewerView接口文件ViewerView.h的前面添加CSetDlg类的包含头文件,如图7所示的加框部分。
图7 添加类CSetDlg类的包含头文件
(5) 运行程序,打开"格式"菜单,单击"背景设置",结果如图7所示。由于我们还没有向对话框添加控件,因此显示的是一个默认的对话框。单击"确定"按钮后,还将弹出一个消息对话框,这就是上述代码的作用。
图8 模式对话框的显示结果