0x00 数据交换和检验
在MFC中,改变控件的属性,其会通过对话框类自动生成的成员函数DoDataExchange()来实现修改相应关联的变量的值。这种现象称为对话框的数据交换和检验机制。需要注意的是,在该机制下DoDateExchange()并不是被自动调用,需要开发者在程序中调用CDialogEx::UpdateData()函数,再由其自动调用DoDataExchange()函数。
UpDateData()函数原型如下:
BOOL UpdateData(BOOL bSaveAndValidate = TRUE)
参数:
bSaveAndValidate指明数据传输方向,若为TRUE,控件-》变量;若为FALSE,变量-》控件。其默认值为TRUE。
返回值:
数据更新操作是否成功,成功为TRUE,失败为FALSE。
0x01 为控件添加消息处理函数
1_右击控件,选择“Add Event Handler...”添加消息处理函数
2_在控件属性中点击“Control Events”按钮(闪电按钮)选择并添加消息。
3_直接双击控件
4_通过Class Wizard添加(此为VS2002至VS2008没有该种方法)
0x02 编辑TAB顺序
在主菜单中选择Format -> Tab Order或者 Ctrl + D使对话框上显示各个控件的TAB顺序数字,然后按开发者想排列的顺序依次点击控件即可。完成后,点击空白处或者按ESC保存修改。
0x03 对话框的分类
1_模态对话框
在一个多对话框的程序运行中,模态对话框弹出后,该程序的其他对话框不能被操作,只有当其退出后,其他的对话框才可以被操作。
ps:模态对话框弹出的原理
其涉及到CDialog类下的一个重要函数DoModal(),调用该函数,对话框就会弹出,其返回值为退出对话框所点的按钮ID。其原型如下:
virtual INT_PTR DoModal();
返回值说明: 其返回值类型为整型,指定了传递给CDialog类下的EndDialog函数【注:该函数用于关闭对话框】的nResult参数,若不能创建对话框,则返回-1,若出现其他的错误则返回IDABORT。
2_非模态对话框
该种对话框,并不影响用户对本程序的其他对话框的操作,一般来说,这种对话框用作显示提示信息。
0x04 属性页对话框
该种对话框用到以下两个类:
1_CPropertyPage类
其用以处理某单个属性页,故需要为每个属性页创建一个继承该类的子类。
\1构造函数<常用>
CPropertyPage() | 无参数构造函数
CPropertyPage(UINT nIDTemplate,UINT nIDCaption = 0,DWORD dwSize = sizeof(PROPSHEETPAGE))
参数说明:
nIDTemplate,属性页的对话框资源ID
nIDCaption,属性页对话框选项卡的标题所用字符串资源的ID,需要注意的是若此值设为0,则选项卡标题就使用该属性页的对话框资源的标题。
CPropertyPage(LPCTSTR lpszTemplateName,UINT nIDCaption = 0,DWORD dwSize = sizeof(PROPSHEETPAGE))
参数说明:
lpszTemplateName,属性页的对话框资源的名称字符串,不能为NULL
nIDCaption,与上面一样。
\2CancleToClose函数
在模态属性页对话框的属性页进行了某不可恢复的操作后,使用CancelToClose函数,将“OK”按钮改为“Close”按钮,并禁用“Cancel”按钮
\3SetModified函数
可激活或禁用"Apply"按钮
\可重载的消息处理函数
OnApply:处理属性页的"Apply"按钮被单击的消息
OnCa