《深入浅出MFC》第十章 MFC与对话框
可以通过对话框编辑器设计对话框模板,在资源视图中选择添加一个对话框资源。通过属性页可以设置对话框或控件的属性。
通过VS环境中的格式,tab顺序可以设置控件的tab顺序,只需按指定的顺序依次点击控件即可。
在VS开发环境中选择“格式”菜单中的测试对话框可以直接测试对话框。
对话框调整完成并保存后会在RC文件中保存相应的数据。
通过编辑对话框模板来完成对话框的外貌设计,通过设计对话框的专用类来完成对话框的行为。通过派生MFC的CDialog类来产生对话框的专用类。
不需要手动为对话框创建专有类,通过ClassWizard完成对话框类的创建,并将对话框上的控件映射到类的成员变量上,这也就是所谓的DDX(Dialog Data eXchange),并且可以为这些变量设置允许值的规则,这就是所谓的DDV(Dialog Data Validate)。
派生的对话框类的构造函数首先调用基类的构造函数,并把对话框模板的ID以及父窗口指针传递给构造函数,这样才有办法在创建对话框时能从RC文件中找到对话框资源。
在对话框的Class Wizard中可以快速的为控件添加消息处理函数,在Object IDs中找到要添加消息的控件ID,然后选中要处理的消息并点击按钮“添加处理函数”即可,并且也可以通过不同的标签页添加对话框消息,重写对话框虚函数,添加控件成员变量和方法等。
对话框的Data Map不同于其它的Map,每笔Data Map都有两笔记录,一个负责DDX,一个负责DDV。Data Map放在.cpp文件中的DoDataExchange函数中。若手动完成Data Map,需要先写DDX,在写DDV,这是规定,必须遵守。当数据“有必要”在控件与成员变量之间搬移时,Framework会自动调用DoDataExchange。当需要手动引发DoDataExchange函数时,只需调用UpdateData(false),其中参数为true时表示从控件中接收数据到类的成员变量中,否则表示从成员变量中初始化控件。参考:https://msdn.microsoft.com/zh-cn/library/t9fb9hww.aspx,https://msdn.microsoft.com/zh-cn/library/cc485513(v=vs.71).aspx