对话框的分类:模式对话框和无模式对话框
1、模式对话框是指在程序继续之前需要用户对该对话框作出响应(单击确定或者取消)。当一个模式对话框打开时,用户只能与该对话框进行交互,其他用户界面对象收不到输入信息。
2、当用户创建无模式对话框以后,用户仍然可以操作其他窗口。无模式对话框可以一直出现在屏幕上,不影响应用程序的执行。比如Windows系统中的查找\替换对话框。
区别:
1、无模式对话框对象必须能在程序运行期间都存在,因此不能像模式对话框那样以局部变量的形式构建在堆栈上
2、无模式对话框是通过调用CDiglog::Create函数来创建的,而模式对话框则是通过调用CDialog::DoModal函数产生的
3、无模式对话框初始必须可见,可设置对话框的Visible风格,或者调用CWnd的成员函数ShowWindow来显示对话框
一般的对话框创建步骤:
1、使用对话框编辑器设计对话框的外观布局,创建对话框模板资源
2、使用ClassWizard创建新的对话框类
3、使用ClassWizard向对话框类中加入与控件相关联的数据成员,并为控件指定对话数据交换和对话数据验证(DDX/DDV)
4、使用ClassWizard进行消息映射,即将对话框资源的控件与对话框类中的消息处理函数联系起来
5、在应用程序中声明对话框类的对象,并使用CDialog类相应的成员函数弹出(显示)对话框
注意:其中模式对话框和无模式对话框只是在最后一步添加的代码有所不同,所需要的对话框模板和对话框类可以是相同的
创建对话框模板资源的步骤:
1、插入新对话框资源
使用Resource View中的右键菜单插入对话框资源,在其属性对话框中修改ID为IDD_LINEWIDTH,修改Caption属性为“设置线条宽度”
2、添加控件
增加3个控件,两个为静态文本控件,一个为编辑框
编辑完对话框模板资源后,可以使用Dialog工具栏最左边的一个按钮(或者使用加速键Ctrl+T,也可使用菜单命令Layout|Test)来测试和观察对话框的显示效果
3、编辑控件属性
依次对三个控件属性进行修改:两个静态文本Caption分别为“线条宽度”和“象素”,编辑框ID为IDC_EDIT_LINEWIDTH
按Ctrl+D(或者只用菜单命令Layout|Tab Order)可以显示对话框所有控件的顺序,然后可以用鼠标来重新指定Tab顺序,指定完顺序后可以在测试状态下观察Tab键是否按照设定的顺序跳动
添加新的对话框类的方法:
1、按加速键Ctrl+W(或者直接双击编辑窗口中的对话框)进入ClassWizard,会询问是否要为IDD_LINEWIDTH创建一个新的对话框类,单击OK确认。
2、在New Class对话框中,输入新对话框类的名称CLineWidthDlg,单击OK按钮。