基于VS2010MFC的对话框项目。包括可编辑框属性设置,数据由可编辑框流向成员变量,数据由成员变量流向可编辑框。控件与控件的数据交换核心在控件与对应数据成员变量之间的数据交换。首先,类向导会自动在DoDataExchange(CDataExchange* pDX)函数内添加控件(用ID标识)与对应成员变量之间进行数据交换的函数。然后用程序员使用CWnd::UpdateData(TRUE | FALSE)函数决定控件与成员变量之间数据传送的方向。如果是新建立的对话框,除了要继承一个对话框类外,则还需要到应用程序类中添加此对话框类对象,并用DoModal();函数获取对话框的状态。
所创建的项目名称为13Jan20Pro。
1、MFC程序实现
此程序的目标:“可编辑控件”与其“数据成员”之间的数据交换。熟悉windows常用控件(静态按钮,可编辑对话框)的使用,进一步熟悉MFC程序框架和MFC程序执行流程。深入认识面向对象程序设计。
1.1、建立程序项目
打开Visual Studio 2010-->文件-->新建-->项目
选择Visual C++下的MFC项,选中MFC应用程序,输入名称,选项目位置,选解决方案,解决方案名称如下:
表格 1:项目信息
名称(N) | 位置(L) | 解决方案(s) | 解决方案名称(M) |
13Jan20Pro | D:\VisualStdioWorkdplace\2013WinterVaction\ | 创建新解决方案 | 13Jan20Pro |
按表1填写好项目信息后点击确定,直到选择到“基于对话框”后点击完成,13Jan20Pro项目建立完成。
1.2、在对话框内添加按钮、可编辑框、标签
在解决方案资源管理器下选中资源文件下的13Jan20Pro.rc,双击打开。在资源视图的Dialog下双击IDD_MY13JAN20PRO_DIALOG,按照步骤添加各控件及对应属性设置如下:
控件类型 | ID | Caption | 数量 | Tabstop/Group |
CStatic | IDC_GRADE/IDC_NAME… | 年级/姓名 | 4 | True |
CEdit | IDC_GRADE_EDIT/IDC_ NAME… | -- | 4 | True |
Cbutton | IDC_SEX_MF/IDC_RESULT | 性别/结果 | 2 | Ture |
BOOL | IDC_SEX_M/IDC_SEX_F | 男/女 | 2 | Ture |
注意:“性别”、“男”、“女”对应的控件的group值要为True,且其它控件的group值为False。
设置完毕后,更改对话框名为“你输我猜”,完毕后对话框界面如下:
1.3、可编辑框控件间的数据交换程序实现
1.3.1、可编辑框控件数据到成员变量
a. 用类向导可编辑框添加成员变量
项目-->类向导,选中13Jan20ProDlg类,添加可编辑框ID对应变量如下:
图2.成员变量
点击确定之后,在13Jan20ProDlg.cpp文件中的DoDataExchange(CDataExchange* pDX)
函数下就会自动生成数据交换的代码:
void CMy13Jan20ProDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_GRADE_EDIT, m_Grade);
DDV_MinMaxInt(pDX, m_Grade, 2009, 2013);
DDX_Text(pDX, IDC_NAME_EDIT, m_Name);
DDV_MaxChars(pDX, m_Name, 20);
DDX_Radio(pDX, IDC_F, m_Sexf);
DDX_Radio(pDX, IDC_M, m_Sexm);
DDX_Text(pDX, IDC_INPUT_NAME_EDIT, m_InName);
DDV_MaxChars(pDX, m_InName, 20);
DDX_Text(pDX, IDC_STRING_EDIT, m_String);
DDV_MaxChars(pDX, m_String, 20);
}
代码中DDX_*函数功能为定义的成员变量与对应控件之间的数据交换,数据流向由pDX参数决定(CWnd::UpdateData(TRUE | FALSE);函数参数决定)。DDV_M*函数功能表示相应数据的取值范围。
b. 代码实现编辑框数据到成员变量
CWnd::UpdateData(TRUE);
从可编辑框中输入数据之后,如果MFC程序能够执行此语句,就能将编辑框中的数据交换到对应的成员变量中。在这里设置一个ID为IDC_RESUL的静态按钮触发此函数
【 利用类向导为此按钮添加消息和消息响应函数,如ON_BN_CLICKED(IDC_RESULT,&CMy13Jan20ProDlg::OnClickedResult),并把CWnd::UpdateData(TRUE);函数添入其中,在输入数据之后才使IDC_RESULT对应函数被调用 】由此成员变量得到可编辑框中的数据。
1.3.2、成员变量到编辑窗口数据转换
m_String ="根据敲键盘灯额特征...";
m_InName = "懒猪来了";
CWnd::UpdateData(FALSE);
此段代码在IDC_RESULT按钮对应消息函数内。m_String和m_InName是分别对应ID号为IDC_INPUT_EDIT,IDC_STRING_EDIT控件的成员变量,详情见图2.
CWnd::UpdateData(FALSE);为成员变量向可编辑框传数据的关键语句。
2、UpdateData
函数原型:BOOL UpdateData(BOOL bSaveAndValidate = TRUE)
功能:用来刷新窗口或控件的数据的(刷新控件与对应成员变量的数据交换),为MFC窗口函数。
函数使用:
a. UpdateData(TRUE) --刷新控件的值到对应的变量,外部值输入到控件(可编辑控件)。UpdateData(FALSE) --拷贝变量的值到控件,变量的值输出到对应控件。
b. UpdateData()函数为CWin类的成员函数,以CWind:: UpdateData(TRUE | FALSE)形式使用。
函数返回值:若数据设定了范围,则此bool类函数返回1表示合法,返回0表示不合法。
3、程序执行结果
执行程序,对话框出现,在对应可编辑框内输入数据:
图3.执行结果
点击显示结果按钮后,可年级、姓名编辑框的数据更新到对应成员变量(CWind:: UpdateData(TRUE )语句实现),Zone_我猜是旁边的两个可编辑框的数据成员被赋予新的值,同时用CWind:: UpdateData(FALSE)语句实现成员变量数据传向对应的可编辑框,如下图:
图4.向编辑框传输数据结果
当然,把年级或者姓名框内数据显示在Zone_我猜是旁的可编辑框是绝对可以的。这就实现了框—框的数据交换。
此次笔记记录完毕。