MFC对话框程序设计详解(朱从旭老师).doc_第1页
MFC对话框程序设计详解(朱从旭老师).doc_第2页
MFC对话框程序设计详解(朱从旭老师).doc_第3页
MFC对话框程序设计详解(朱从旭老师).doc_第4页
MFC对话框程序设计详解(朱从旭老师).doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MFC对话框程序设计详解(朱从旭 老师)1. 利用MFCAppWizard(exe)建立程序框架注意:请各位同学新建的“工程名称”用自己的全学号命名(这里假定学号是“123”):图1 “新建”对话框之新建“工程”图2 选择“程序类型”图3 选择“程序类型”续1图4 选择“程序类型”续2图5 “程序类”总结图6 程序最后总结图1.7 在开发环境下看程序的界面2. 设计程序的界面图2.1 在开发环境下调出“控件”工具箱图2.2 在程序的“界面”中删除不要的控件图2.3 用鼠标在“控件”工具箱里单击“静态文本”控件,然后在界面上画出一个“静态文本”控件(Static),然后右击该控件并单击“属性”菜单图2.4 在弹出的“属性”对话框中指定该控件的ID(名称)、标题(可见内容)图2.5 按照图2.12.4的方法画出一个编辑框(EDIT),并在它的“属性”对话框中指定该控件的ID(名称)图2.6 按照图2.12.4的方法画出一个命令按钮(BUTTON),并在它的“属性”对话框中指定该命令按钮控件的ID(名称)、标题图2.7 按上述方法画出本程序的所有控件;同时将原有“确定”控件的标题改为“添加学生”,将原有“取消”控件的标题改为“退出程序”3. 设置“消息映射Message Maps”和“成员变量Member Variables”3.1 从“查看”菜单/“建立类向导”引出“MFC ClassWizard”对话框(图3.1);图3.1 “MFC ClassWizard”对话框3.2 为每个编辑框(Edit)设置成员变量(Member Variables)以“学号”框设置成员变量为例:在图3.1中,选“Member Variables”标签;然后在控件列表框中选定“Number_EDIT”,并单击“Add Variable按钮,在弹出的“Add Member Variable对话框中,指定它的关联变量的名字为m_1(也可以是其它名字),关联变量的数据类型为int,如图3.2所示。按此法为每个编辑框指定一个关联变量(含名字、数据类型)。图3.2 设置编辑框的关联变量(变量名、数据类型)3.3 为每个命令按钮(Button)设置消息映射(Message Maps)以“添加学生”按钮设置鼠标单击的消息映射为例:在图3.1中,选“Message Maps”标签;然后在控件列表框中选定“Add_BUTTON”,在“Message”列表框中选定“BN_CLICKED”;并单击“Add Function按钮; 如图3.3所示。图3.3 为Add_BUTTON按钮设置消息映射在弹出的图3.4“Add Member Function 对话框中,指定函数名字(如OnAddButton);单击“OK”按钮。按此法为其余的每个命令按钮分别指定一个成员函数;每个按钮对鼠标单击消息关联的成员函数名分别指定为表2所示的名称。图3.4 为Add_BUTTON按钮设置的成员函数名(OnAddButton)至此,程序界面基本上已经设置好。用户可以运行程序,即可看到图3.5所示的程序界面;但是用户单击界面上的任何按钮时,程序不能执行任何功能,那是因为我们还没有写一句程序代码。接下来的事情将是为程序写语句(代码)。图3.5 程序运行时的界面为了下一步写程序的方便,我们需要记住界面上控件的一些关键信息。为清楚起见,在此将这些关键信息列于表1表2中:表1是每个编辑框的名字、对应关联变量名;表2是每个命令按钮的名字、鼠标单击消息所关联的成员函数名。表1. 每个编辑框的名字、对应关联变量名编辑框描述的内容编辑框的名称编辑框的关联变量名关联变量的数据类型学号Number_EDITm_1int姓名Name_EDITm_2Cstring语文Chinese_EDITm_3int数学Math_EDITm_4int英语English_EDITm_5int输出姓名OutName_EDITm_6Cstring输出总分OutTotal_EDITm_7int输出平均分OutAverage_EDITm_8Int指定学号值Specify_EDITm_9int表2. 每个命令按钮的名称、鼠标单击消息关联的成员函数名按钮的功能描述按钮的名称按钮鼠标单击消息关联的成员函数名添加学生Add_BUTTONOnAddButton退出程序Exit_BUTTONOnExitButton查找指定学号学生并输出Search_BUTTON1OnSchearButton1查找总分最高学生输出Search_BUTTON2OnSchearButton2查找总分最低学生输出Search_BUTTON3OnSchearButton3删除指定学号学生全部信息Delete_BUTTONOnDeleteButton4. 编写程序代码现在,单击开发环境界面左半窗下面的“FileView”标签,再双击“Source Files”下面的文件名“123Dlg.cpp”,即可看到系统自动生成了每个消息的关联成员函数的框架代码。编程人员要做的事就是在相应函数体内填写所需要的程序代码;当然,用户还得事先为整个程序的“123.cpp”源文件以及“123.h”头文件写一些代码。下面给出一些主要代码,供参考,尤其注意关键代码的注释意思。4.1 头文件“123.h”(学号.h, 其内容是定义一个学生公共课程的“类”:c123)/ 将下列“类定义”代码添加到系统自动生成的头文件“123.h”原有代码末尾class c123 /要求类名的命名规则为“C你的学号”protected: int Number; /学生学号 int Chinese, Math, English;/语文、数学、英语三科成绩 int Total, average;/三科的总分、平均分,public: char Name20; /学生姓名 c123(int Num, char *pc, int Eng, int Chi, int Mat); c123( ); / 类的2个重载构造函数:c123 c123( );/ 类的1个析构函数/ 以下为读取成员变量值的函数,均以getXXX形式命名 int getNum( ) return Number; char *getName() return Name; int getEng() return English; int getChi() return Chinese; int getMat() return Math; / 以下为设置成员变量值的函数,均以setXXX形式命名 void setNum(int x) Number=x; void setEng(int x) English=x; void setChi(int x) Chinese=x; void setMat(int x) Math=x; int getTotal() return English+Chinese+Math; int getAverage() return (English+Chinese+Math)/3; 4.2 源文件123.cpp (对类c123的构造函数进行实现)#include stdafx.h /VC+程序要包含这个文件,而且要先包含#include 123.h /123.h头文件放在(#include stdafx.h)的后面#include string.h / 此句加在上面两句之后,包含字符处理库函数的头文件/ 以下语句添加到系统已有语句后面/类c123的构造函数c123( )实现,此代码添加到系统自动生成的原有代码末尾c123:c123(int Num, char *pc, int Eng, int Chi, int Mat) Number=Num; /给c123类成员变量Number赋值(即设置“学号”数据) strcpy(Name, pc); /字符串不能直接赋值,要调用C+库函数strcpy()进行复制 English=Eng; /给类c123的English成员变量赋值(即设置“英语”课成绩) Chinese=Chi; /给类c123的Chinese成员变量赋值(即设置“语文”课成绩) Math=Mat; /给类c123的Math成员变量赋值(即设置“数学”课成绩) Total=Eng+Chi+Mat; /总分Total的值是算出来的 average=(Eng+Chi+Mat)/3; /平均分average的值也是算出来的4.3 源文件123Dlg.cpp中按钮单击消息对应的成员函数功能实现/本程序用对象数组可处理100位以内学生的信息,自己添加的语句我用红色突出显示#include stdafx.h #include 123.h #include 123Dlg.h #include math.h /自己添加的语句,此句加在上面两句之后,/ 紧接着添加如下两句,定义对象数组MyObj100和全局变量ic123 MyObj100; /定义类c123的100个对象, 即对象数组MyObjint i = -1; /定义外部变量i,统计当前对象总数/此处省略系统自动生成的其它内容,不改动,在这些内容后的相关函数中添加语句/只要在这些内容的后面相关函数中添加一些自己写的功能语句(红色语句为自己写的)void CMy123Dlg:OnAddButton() /添加学生信息 / TODO: Add your control notification handler code here i +; UpdateData(TRUE); / 最重要的句子之一,记住其功能:是实现数据输入功能 / UpdateData(TRUE)将控件中的数据传递给相应的关联变量:m_1,m_2等 MyObji.setNum(m_1); strcpy(MyObji.Name, m_2); /必须将c123类的Name变量定义为public的,/才可以这样直接访问MyObji.Name MyObji.setChi(m_3); MyObji.setMat(m_4); MyObji.setEng(m_5); void CMy123Dlg:OnDeleteButton() /删除学生信息 / TODO: Add your control notification handler code hereUpdateData(TRUE); /将控件中的数据传递给相应的关联变量/ 主要是为了使m_9得到第9个Edit框里面的内容);要删除的学号是m_9 int n, k; /n做循环变量,k记录学号等于待查学号m_9的对象数组元素的下标 k=-1; /给k初始化一个负数 for (n=0;n=i;n+) if (MyObjn.getNum( )=m_9) k=n; if (k=-1) m_6=无此学号可删除; else for (n=k;n=i-1;n+) strcpy(MyObjn.Name,MyObjn+1.Name); MyObjn.setNum(MyObjn+1.getNum( ); MyObjn.setChi(MyObjn+1.getChi( ); MyObjn.setMat(MyObjn+1.getMat( ); MyObjn.setEng(MyObjn+1.getEng( ); strcpy(MyObji.Name,); MyObji.setNum(0); MyObji.setChi(0); MyObji.setMat(0); MyObji.setEng(0); i-;void CMy123Dlg:OnExitButton( ) /退出程序 / TODO: Add your control notification handler code here CDialog:OnOK( ); void CMy123Dlg:OnSchearButton1( ) /“查找指定学号” / TODO: Add your control notification handler code hereUpdateData(TRUE); /将控件中的数据传递给相应的关联变量/ 主要是为了使m_9得到第9个Edit框里面的内容);要查找的学号是m_9 int n, k; /n做循环变量,k记录学号等于待查学号m_8的对象数组元素的下标 k=-1; /给k初始化一个负数 for (n=0;n=i;n+) if (MyObjn.getNum( )=m_9) k=n; if (k=-1) m_6=查无此人; m_7=0; m_8=0; else m_6=MyObjk.Name; m_7=MyObjk.getTotal( ); m_8=MyObjk.getAverage( ); UpdateData(FALSE); / 最重要的句子之二,记住其功能:是实现数据输出功能/ UpdateData(FALSE)将相应的关联变量值输出到界面上相关控件里面void CMy123Dlg:OnSchearButton2( ) /“查找最高分” / TODO: Add your control notification handler code here

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论