所创建的项目名称为13Jan20Pro。
此程序的目标:“可编辑控件”与其“数据成员”之间的数据交换。熟悉windows常用控件(静态按钮,可编辑对话框)的使用,进一步熟悉MFC程序框架和MFC程序执行流程。深入认识面向对象程序设计。
打开Visual Studio 2010-->文件-->新建-->项目
选择Visual C++下的MFC项,选中MFC应用程序,输入名称,选项目位置,选解决方案,解决方案名称如下:
表格 1:项目信息
名称(N) |
位置(L) |
解决方案(s) |
解决方案名称(M) |
13Jan20Pro |
D:\VisualStdioWorkdplace\2013WinterVaction\ |
创建新解决方案 |
13Jan20Pro |
按表1填写好项目信息后点击确定,直到选择到“基于对话框”后点击完成,13Jan20Pro项目建立完成。
在解决方案资源管理器下选中资源文件下的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。
设置完毕后,更改对话框名为“你输我猜”,完毕后对话框界面如下:
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); }
b. 代码实现编辑框数据到成员变量
CWnd::UpdateData(TRUE);
从可编辑框中输入数据之后,如果MFC程序能够执行此语句,就能将编辑框中的数据交换到对应的成员变量中。在这里设置一个ID为IDC_RESUL的静态按钮触发此函数
【 利用类向导为此按钮添加消息和消息响应函数,如ON_BN_CLICKED(IDC_RESULT,&CMy13Jan20ProDlg::OnClickedResult),并把CWnd::UpdateData(TRUE);函数添入其中,在输入数据之后才使IDC_RESULT对应函数被调用 】由此成员变量得到可编辑框中的数据。
m_String ="根据敲键盘灯额特征..."; m_InName = "懒猪来了"; CWnd::UpdateData(FALSE);
此段代码在IDC_RESULT按钮对应消息函数内。m_String和m_InName是分别对应ID号为IDC_INPUT_EDIT,IDC_STRING_EDIT控件的成员变量,详情见图2.
CWnd::UpdateData(FALSE);为成员变量向可编辑框传数据的关键语句。
函数原型:BOOL UpdateData(BOOL bSaveAndValidate = TRUE)
功能:用来刷新窗口或控件的数据的(刷新控件与对应成员变量的数据交换),为MFC窗口函数。
函数使用:
a. UpdateData(TRUE) --刷新控件的值到对应的变量,外部值输入到控件(可编辑控件)。UpdateData(FALSE) --拷贝变量的值到控件,变量的值输出到对应控件。
b. UpdateData()函数为CWin类的成员函数,以CWind:: UpdateData(TRUE | FALSE)形式使用。
函数返回值:若数据设定了范围,则此bool类函数返回1表示合法,返回0表示不合法。
执行程序,对话框出现,在对应可编辑框内输入数据:
图3.执行结果
点击显示结果按钮后,可年级、姓名编辑框的数据更新到对应成员变量(CWind:: UpdateData(TRUE )语句实现),Zone_我猜是旁边的两个可编辑框的数据成员被赋予新的值,同时用CWind:: UpdateData(FALSE)语句实现成员变量数据传向对应的可编辑框,如下图:
图4.向编辑框传输数据结果
当然,把年级或者姓名框内数据显示在Zone_我猜是旁的可编辑框是绝对可以的。这就实现了框—框的数据交换。