《MFC应用开发技术》基于MFC的应用系统开发案例.ppt
- 格式:ppt
- 大小:7.54 MB
- 文档页数:134
一、实验名称:实验I:基于MFC的一个简单应用系统的开发示例二、实验目的:1、了解MFC软件开发的基本知识2、掌握MFC中基本控件的使用方法三、实验器材:1、计算机四、实验内容:说明:1)此实例适用于有一定C语言基础的对象;2)所涉及到的系统分析、功能设置、数据结构、模块划分、算法设计等可参考实验H:小系统开发;3)建议在开发过程中打开百度,不懂的知识点可随手查看。
开发一个基于对话框的“班级基本信息管理系统”,如下:1.新建一项目文件,设置如下图:2.单击“OK”,进入下一步:选中“Dialog based”,然后按向导往下做,所有设置取默认值,直到完成为止。
完成后的界面如下:3.右击对话框空白处,在菜单中选“Properties”,弹出如下界面:设置其中的Caption为“班级基本信息管理”。
4.将对话框上原有的一个标签(静态文本框)和两个按钮都删除,使之为空白,以备我们全部自行设置内容。
5.给此对话框添加四个标签(静态文本框),逐个右击,在菜单中选“Properties”,在出6.给此对话框添加四个编辑框,逐个右击,在菜单中选“Properties”,在出现的对话框中修改其属性如下表:7.给此对话框添加十一个命令按钮,逐个右击,在菜单中选“Properties”,在出现的对话8.选中其中的“学号、姓名、性别、年龄”四个编辑框,右击,将其“Disabled”属性选中,如下所示:9.同样,将“确定”和“取消”两按钮的Disabled属性也选中。
10.编译->连接->运行,效果如下:11.运行可知,目前只是界面有了,但功能都没有实现,接下来完善功能。
12.双击“退出”按钮,如下图:13.单击OK,进入代码编辑窗口后键入如下代码(加粗部分为用户键入内容,下同):void CClassManageDlg::OnButtonTc(){// TODO: Add your control notification handler code hereEndDialog(NULL);}14.在代码编辑窗口的前面添加如下代码(在前面找个适当位置添加即可,注意,不要放在函数内部):#define N 100 //最大人数struct stu_info{char xh[15]; //学号char xm[7]; //姓名char xb[3]; //性别int nl; //年龄};struct stu_info stu[N+1];//用于存放所有人相关信息,0号元素备用int CurrentCount=0; //当前实际人数int intWz=0; //用于指示当前位置(元素编号)bool boolXgOrTj; //标记是修改还是添加,TRUE:修改FALSE:添加15.双击“添加”,进入代码编辑窗口后在相应位置添加如下代码以对“添加”按钮进行响应:void CClassManageDlg::OnButtonTj(){// TODO: Add your control notification handler code hereCButton * cBtnSyg=(CButton *)GetDlgItem(IDC_BUTTON_SYG); //上一个按钮CButton * cBtnXyg=(CButton *)GetDlgItem(IDC_BUTTON_XYG); //下一个按钮CButton * cBtnDyg=(CButton *)GetDlgItem(IDC_BUTTON_DYG); //第一个按钮CButton * cBtnMyg=(CButton *)GetDlgItem(IDC_BUTTON_MYG); //末一个按钮CButton * cBtnTj=(CButton *)GetDlgItem(IDC_BUTTON_TJ); //添加按钮CButton * cBtnXg=(CButton *)GetDlgItem(IDC_BUTTON_XG); //修改按钮CButton * cBtnQd=(CButton *)GetDlgItem(IDC_BUTTON_QD); //确定按钮CButton * cBtnQx=(CButton *)GetDlgItem(IDC_BUTTON_QX); //取消按钮CButton * cBtnSc=(CButton *)GetDlgItem(IDC_BUTTON_SC); //删除按钮CButton * cBtnCx=(CButton *)GetDlgItem(IDC_BUTTON_CX); //查询按钮CButton * cBtnTc=(CButton *)GetDlgItem(IDC_BUTTON_TC); //退出按钮CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框cBtnSyg->EnableWindow(FALSE);cBtnXyg->EnableWindow(FALSE);cBtnDyg->EnableWindow(FALSE);cBtnMyg->EnableWindow(FALSE);cBtnTj->EnableWindow(FALSE);cBtnXg->EnableWindow(FALSE);cBtnQd->EnableWindow(TRUE);cBtnQx->EnableWindow(TRUE);cBtnSc->EnableWindow(FALSE);cBtnCx->EnableWindow(FALSE);cBtnTc->EnableWindow(FALSE);cEdtXh->EnableWindow(TRUE);cEdtXm->EnableWindow(TRUE);cEdtXb->EnableWindow(TRUE);cEdtNl->EnableWindow(TRUE);cEdtXh->SetFocus();boolXgOrTj=FALSE;}16.双击“修改”,进入代码编辑窗口后在相应位置添加如下代码以对“修改”按钮进行响应:void CClassManageDlg::OnButtonXg(){// TODO: Add your control notification handler code hereif(intWz<1 || intWz>CurrentCount)MessageBox("当前不是有效数据,不能修改!!!","修改信息");else{CButton * cBtnSyg=(CButton *)GetDlgItem(IDC_BUTTON_SYG); //上一个按钮CButton * cBtnXyg=(CButton *)GetDlgItem(IDC_BUTTON_XYG); //下一个按钮CButton * cBtnDyg=(CButton *)GetDlgItem(IDC_BUTTON_DYG); //第一个按钮CButton * cBtnMyg=(CButton *)GetDlgItem(IDC_BUTTON_MYG); //末一个按钮CButton * cBtnTj=(CButton *)GetDlgItem(IDC_BUTTON_TJ); //添加按钮CButton * cBtnXg=(CButton *)GetDlgItem(IDC_BUTTON_XG); //修改按钮CButton * cBtnQd=(CButton *)GetDlgItem(IDC_BUTTON_QD); //确定按钮CButton * cBtnQx=(CButton *)GetDlgItem(IDC_BUTTON_QX); //取消按钮CButton * cBtnSc=(CButton *)GetDlgItem(IDC_BUTTON_SC); //删除按钮CButton * cBtnCx=(CButton *)GetDlgItem(IDC_BUTTON_CX); //查询按钮CButton * cBtnTc=(CButton *)GetDlgItem(IDC_BUTTON_TC); //退出按钮CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框cBtnSyg->EnableWindow(FALSE);cBtnXyg->EnableWindow(FALSE);cBtnDyg->EnableWindow(FALSE);cBtnMyg->EnableWindow(FALSE);cBtnTj->EnableWindow(FALSE);cBtnXg->EnableWindow(FALSE);cBtnQd->EnableWindow(TRUE);cBtnQx->EnableWindow(TRUE);cBtnSc->EnableWindow(FALSE);cBtnCx->EnableWindow(FALSE);cBtnTc->EnableWindow(FALSE);cEdtXh->EnableWindow(TRUE);cEdtXm->EnableWindow(TRUE);cEdtXb->EnableWindow(TRUE);cEdtNl->EnableWindow(TRUE);cEdtXh->SetFocus();boolXgOrTj=TRUE;}}17.双击“确定”,进入代码编辑窗口后在相应位置添加如下代码以对“确定”按钮进行响应:void CClassManageDlg::OnButtonQd(){// TODO: Add your control notification handler code hereCButton * cBtnSyg=(CButton *)GetDlgItem(IDC_BUTTON_SYG); //上一个按钮CButton * cBtnXyg=(CButton *)GetDlgItem(IDC_BUTTON_XYG); //下一个按钮CButton * cBtnDyg=(CButton *)GetDlgItem(IDC_BUTTON_DYG); //第一个按钮CButton * cBtnMyg=(CButton *)GetDlgItem(IDC_BUTTON_MYG); //末一个按钮CButton * cBtnTj=(CButton *)GetDlgItem(IDC_BUTTON_TJ); //添加按钮CButton * cBtnXg=(CButton *)GetDlgItem(IDC_BUTTON_XG); //修改按钮CButton * cBtnQd=(CButton *)GetDlgItem(IDC_BUTTON_QD); //确定按钮CButton * cBtnQx=(CButton *)GetDlgItem(IDC_BUTTON_QX); //取消按钮CButton * cBtnSc=(CButton *)GetDlgItem(IDC_BUTTON_SC); //删除按钮CButton * cBtnCx=(CButton *)GetDlgItem(IDC_BUTTON_CX); //查询按钮CButton * cBtnTc=(CButton *)GetDlgItem(IDC_BUTTON_TC); //退出按钮CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框cBtnSyg->EnableWindow(TRUE);cBtnXyg->EnableWindow(TRUE);cBtnDyg->EnableWindow(TRUE);cBtnMyg->EnableWindow(TRUE);cBtnTj->EnableWindow(TRUE);cBtnXg->EnableWindow(TRUE);cBtnQd->EnableWindow(FALSE);cBtnQx->EnableWindow(FALSE);cBtnSc->EnableWindow(TRUE);cBtnCx->EnableWindow(TRUE);cBtnTc->EnableWindow(TRUE);cEdtXh->EnableWindow(FALSE);cEdtXm->EnableWindow(FALSE);cEdtXb->EnableWindow(FALSE);cEdtNl->EnableWindow(FALSE);if(boolXgOrTj==FALSE)//属于添加这种情况{if(CurrentCount==N)MessageBox("人数已达上限,不能再添加!!!","添加信息");else{CString strTemp;CurrentCount++;intWz=CurrentCount;cEdtXh->GetWindowText(stu[CurrentCount].xh,14);cEdtXm->GetWindowText(stu[CurrentCount].xm,8);cEdtXb->GetWindowText(stu[CurrentCount].xb,4);cEdtNl->GetWindowText(strTemp);stu[CurrentCount].nl=atoi(strTemp);}cBtnTj->SetFocus();}else//属于修改这种情况{CString strTemp;cEdtXh->GetWindowText(stu[intWz].xh,14);cEdtXm->GetWindowText(stu[intWz].xm,8);cEdtXb->GetWindowText(stu[intWz].xb,4);cEdtNl->GetWindowText(strTemp);stu[intWz].nl=atoi(strTemp);cBtnXg->SetFocus();}}18.双击“取消”,进入代码编辑窗口后在相应位置添加如下代码以对“取消”按钮进行响应:void CClassManageDlg::OnButtonQx(){// TODO: Add your control notification handler code hereCButton * cBtnSyg=(CButton *)GetDlgItem(IDC_BUTTON_SYG); //上一个按钮CButton * cBtnXyg=(CButton *)GetDlgItem(IDC_BUTTON_XYG); //下一个按钮CButton * cBtnDyg=(CButton *)GetDlgItem(IDC_BUTTON_DYG); //第一个按钮CButton * cBtnMyg=(CButton *)GetDlgItem(IDC_BUTTON_MYG); //末一个按钮CButton * cBtnTj=(CButton *)GetDlgItem(IDC_BUTTON_TJ); //添加按钮CButton * cBtnXg=(CButton *)GetDlgItem(IDC_BUTTON_XG); //修改按钮CButton * cBtnQd=(CButton *)GetDlgItem(IDC_BUTTON_QD); //确定按钮CButton * cBtnQx=(CButton *)GetDlgItem(IDC_BUTTON_QX); //取消按钮CButton * cBtnSc=(CButton *)GetDlgItem(IDC_BUTTON_SC); //删除按钮CButton * cBtnCx=(CButton *)GetDlgItem(IDC_BUTTON_CX); //查询按钮CButton * cBtnTc=(CButton *)GetDlgItem(IDC_BUTTON_TC); //退出按钮CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框cBtnSyg->EnableWindow(TRUE);cBtnXyg->EnableWindow(TRUE);cBtnDyg->EnableWindow(TRUE);cBtnMyg->EnableWindow(TRUE);cBtnTj->EnableWindow(TRUE);cBtnXg->EnableWindow(TRUE);cBtnQd->EnableWindow(FALSE);cBtnQx->EnableWindow(FALSE);cBtnSc->EnableWindow(TRUE);cBtnCx->EnableWindow(TRUE);cBtnTc->EnableWindow(TRUE);cEdtXh->EnableWindow(FALSE);cEdtXm->EnableWindow(FALSE);cEdtXb->EnableWindow(FALSE);cEdtNl->EnableWindow(FALSE);if(boolXgOrTj==FALSE)//属于添加这种情况cBtnTj->SetFocus();else//属于修改这种情况cBtnXg->SetFocus();}19.双击“上一个”,进入代码编辑窗口后在相应位置添加如下代码以对“上一个”按钮进行响应:void CClassManageDlg::OnButtonSyg(){// TODO: Add your control notification handler code hereCEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框if(CurrentCount<1)MessageBox("无信息可供查看!!!","查看信息");else{if(intWz<=1)intWz=CurrentCount;elseintWz--;cEdtXh->SetWindowText(stu[intWz].xh);cEdtXm->SetWindowText(stu[intWz].xm);cEdtXb->SetWindowText(stu[intWz].xb);CString strTemp;strTemp.Format("%d",stu[intWz].nl);cEdtNl->SetWindowText(strTemp);}}20.双击“下一个”,进入代码编辑窗口后在相应位置添加如下代码以对“下一个”按钮进行响应:void CClassManageDlg::OnButtonXyg(){// TODO: Add your control notification handler code hereCEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框if(CurrentCount<1)MessageBox("无信息可供查看!!!","查看信息");else{if(intWz>=CurrentCount)intWz=1;elseintWz++;cEdtXh->SetWindowText(stu[intWz].xh);cEdtXm->SetWindowText(stu[intWz].xm);cEdtXb->SetWindowText(stu[intWz].xb);CString strTemp;strTemp.Format("%d",stu[intWz].nl);cEdtNl->SetWindowText(strTemp);}21.双击“第一个”,进入代码编辑窗口后在相应位置添加如下代码以对“第一个”按钮进行响应:void CClassManageDlg::OnButtonDyg(){// TODO: Add your control notification handler code hereCEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框if(CurrentCount<1)MessageBox("无信息可供查看!!!","查看信息");else{intWz=1;cEdtXh->SetWindowText(stu[intWz].xh);cEdtXm->SetWindowText(stu[intWz].xm);cEdtXb->SetWindowText(stu[intWz].xb);CString strTemp;strTemp.Format("%d",stu[intWz].nl);cEdtNl->SetWindowText(strTemp);}}22.双击“末一个”,进入代码编辑窗口后在相应位置添加如下代码以对“末一个”按钮进行响应:void CClassManageDlg::OnButtonMyg(){// TODO: Add your control notification handler code hereCEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框if(CurrentCount<1)MessageBox("无信息可供查看!!!","查看信息");else{intWz=CurrentCount;cEdtXh->SetWindowText(stu[intWz].xh);cEdtXm->SetWindowText(stu[intWz].xm);cEdtXb->SetWindowText(stu[intWz].xb);CString strTemp;strTemp.Format("%d",stu[intWz].nl);cEdtNl->SetWindowText(strTemp);}23.双击“删除”,进入代码编辑窗口后在相应位置添加如下代码以对“删除”按钮进行响应:void CClassManageDlg::OnButtonSc(){// TODO: Add your control notification handler code hereif(intWz<1 || intWz>CurrentCount)MessageBox("当前不是有效数据,不能删除!!!","删除信息");elseif(MessageBox("确定要删除吗?","删除信息",MB_ICONQUESTION|MB_YESNO)==IDYES){//从数组中删除for(int i=intWz+1;i<=CurrentCount;i++)stu[i-1]=stu[i];CurrentCount--;MessageBox("已成功删除!","删除信息");//显示后一条记录信息CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框if(CurrentCount>=1)//还有剩余信息可供操作{if(intWz>=CurrentCount+1)//当前是最后一个intWz=1; //显示第一条信息cEdtXh->SetWindowText(stu[intWz].xh);cEdtXm->SetWindowText(stu[intWz].xm);cEdtXb->SetWindowText(stu[intWz].xb);CString strTemp;strTemp.Format("%d",stu[intWz].nl);cEdtNl->SetWindowText(strTemp);}else{cEdtXh->SetWindowText("无人员信息");cEdtXm->SetWindowText("");cEdtXb->SetWindowText("");CString strTemp;strTemp.Format("%s","");cEdtNl->SetWindowText(strTemp);}}}24.逐个选择主菜单中的如下菜单项:Insert->Resource,出现如下界面:选中“Menu”后再单击“OK”按钮,则可增加一菜单IDR_MENU1,如下图:25.右击IDR_MENU1,选Properties (属性),按下图进行设置:26.双击IDR_MENU_MAIN,出现如下窗口:在此窗口中对菜单进行编辑(右击选Properties (属性)可以进行编辑),如下: 主菜单:两项,样式如下图:属性如下:击,选“Properties”,如下图:28.单击Menu中右侧的下箭头,选中其中的IDR_MENU_MAIN,如下图:29.重新编译运行,效果如下:发现已经有了菜单,但菜单没作用,下面再逐步实现各菜单项功能。
职业技术、职业师范学院《基于MFC应用技术开发》实验指导书适用专业:计算机科学与技术专业贵州大学二OO九年二月前言曾经使用过传统的 Windows 编程方法开发过应用程序的读者应该深刻地体会到,即使是开发一个简单的 Windows 应用程序也需要对 Windows 的编程原理有很深刻地认识,同时也要手工编写很多代码。
而且程序的出错率几乎是随着代码长度的增加呈几何级数增长的,这使得调试程序变得非常困难,所以传统的Windows 编程是需要极大的耐心和丰富的编程经验的。
MFC 的本质就是一个包含许多微软公司已经定义好的对象的类库,虽然用户要编写的程序在功能上是千差万别的,但从本质上来讲,都可以划分为对用户界面的设计、对文件的操作、多媒体的使用、数据库的访问等方面,这也是微软提供 MFC 类库最重要的原因,在这个类库中包含了一百多个程序开发过程中最常用到的对象。
在进行程序设计时,如果类库中的某个对象能完成所需要的功能,则只要简单地调用已有对象的方法就可以了。
还可以利用面向对象技术中很重要的“继承”方法从类库中的已有对象派生出自己的对象,这时派生出来的对象除了具有类库中的对象的特性和功能外,还可以由用户自己根据需要加上所需要的特性和方法,从而产生一个专门的、功能更为强大的对象。
当然也可以在程序中创建全新的对象,并根据需要不断完善对象的功能。
正是由于 MFC 编程方法充分利用了面向对象技术的优点,使得编程时不必关心对象方法的实现细节,同时类库中的各种对象足以完成程序中的绝大部分功能,从而大幅度减少应用程序中编写的代码,有力地保证了程序的良好性和可调试性。
基于MFC应用技术开发是计算机科学技术专业的一门重要的选修课,学生通过实验课,理论结合实践,熟悉MFC的设计原理、掌握MFC库的消息映射、掌握管理单文档、视图的SDI程序设计方法,熟悉常见对话框应用、掌握常见按钮控件、编辑控件使用方法;了解基本的MFC图形应用程序设计方法、掌握基本的多媒体程序设计方法、了解套接字网络应用程序、了解浏览器应用程序设计方法。