《MFC应用开发技术》基于MFC的应用系统开发案例.ppt

合集下载

基于MFC的一个简单应用系统的开发示例

基于MFC的一个简单应用系统的开发示例

一、实验名称:实验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的应用程序框架分析幻灯片PPT

基于MFC的应用程序框架分析幻灯片PPT
由基类CDocument派生,文档类负责存放程序 数据并读取磁盘文件数据,或将磁盘文件数 据写入磁盘文件中。 比如在建立一个图形系统时,存储图形的数 据结构等都是放在文档类中的。
2、视图类
视图类是由CView类派生的,它负责显示文档 类的数据,可以显示在屏幕上,也可以输出 在打印机和其他设备上。在屏幕上,这个类 管理客户窗口。 例:在实现一个图形系统时,屏幕上显示、 打印机绘图的工作都是由视图类完成的。
基于MFC的应用程序框架分析幻 灯片PPT
本PPT课件仅供大家学习使用 请学习完及时删除处理 谢谢!
一、什么是MFC?
1、概述 微软基础类库(MFC:Microsoft Foundation Class)
是微软为Windows程序员提供的一个面向对象的 Windows编程接口,它大大简化了Windows编程工作。 使用MFC类库的好处是:首先,MFC提供了一个标准化 的结构,这样开发人员不必从头设计创建和管理一个 标准Windows应用程序所需的程序,而是“站在巨人 肩膀上”,从一个比较高的起点编程,故节省了大量 的时间;其次,它提供了大量的代码,指导用户编程 时实现某些技术和功能。 2、MFC类库的概念及组成 (1) 类库是一个可以在应用中使用的相互关联的C++类 的集合。
化.如果失败,则调用应用类的ExitInstance ()函数,转至5)。 4)调用应用类的Run()函数,其功能主要是 进行消息循环,
不断获取消息和处理消息。一直到用户关闭应用程序的窗口, 产生WM_QUIT消息,调用ExitInstance ()函数,准备退出。
5)进行应用程序的收尾工作,比如删除注册 的窗口类等。 6)返回。
CDrawView* pView=(CDrawView *)GetActiveView( ); 3、获得应用类对象的指针 例:CDrawApp* pWinApp=(CDrawApp*)AfxGetApp(); 4、从应用类对象中获得主框架类对象的指针

MFC应用制作基础.ppt

MFC应用制作基础.ppt

初始化消息、输入消息等。每种消息又可
以进行更具体的分类,例如输入消息包括
键盘、鼠标、菜单和计时器消息等。总体
上可将Windows消息分为三种类型:
– 标准Windows消息:以 WM_前缀开始的消息, 如WM_MOVE、WM_PAINT等。
– 控件通知消息:由对控件的操作引起、由控件 或子窗口发往父窗口WM_COMMAND的消息。
lpszMenuName;// 窗口中菜单资源名称句柄
LPCTSTR
lpszClassName;// 窗口标题字符串
பைடு நூலகம்
} WNDCLASS;
前一页 休息
13
3. 窗口结构的赋值
先定义一个WNDCLASS变量,后为各成员赋值:
WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VERDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLOCATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = GetStockobject(WHITE_BRUSH); wndclass.lpszMenuName = "MyMenu"; wndclass.lpszClassName = "MyWndClass";
GetMessage 不断侦听应用程序的消息队 列,一旦队列非空,便将消息拷贝到MSG 变量msg中,经TranslateMessage翻译, 由DispatchMessage通知Windows,通 过“回调”将消息分发给相应的应用程序。

第2章MFC应用程序概述.ppt

第2章MFC应用程序概述.ppt
mdTarget类
命令类CCmdTarget是CObject的子类,它是MFC 库中所有具有消息映射属性的类的公共基类。从 CCmdTarget派生的类能在程序运行时动态创建对象 和处理命令消息。
VC++应用编程
3.CWinApp类
应用程序类CWinApp是CWinThread的子类,封 装了初始化、运行、终止应用程序的代码。可以 由此派生自己的应用类。
CLi2_1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here MessageBox("这是一个单文档应用程序!",
"消息框", MB_ICONEXCLAMATION|MB_OKCANCEL); }
不支持任何复合文档
应用程序作为复合文档容器,包含 可以链接或嵌入的ActiveX对象
应用程序仅仅可以创建能够嵌入到 其他应用程序中的文档,但是不能 作为一个单独运行的应用程序
应用程序可以单独运行,同时也可 以作为一个对象嵌入到其他应用程 序中
应用程序能够作为容器包含嵌入或 链接的ActiveX对象,同时也能够 作为一个可以嵌入到其他程序中的 对象
VC++应用编程
【例2.1】编写一个SDI单文档应用程序Li2_1,程序运行后, 通过消息框输出“这是一个单文档应用程序!”的提示信息。 (1) 选择File菜单下的New菜单项,系统弹出New对话框。 单击
工程名 输入
保存文件路径
默认
VC++应用编程
(2) MFC AppWizard-Step 1对话框主要用于选择应用程序 类型。AppWizard可以创建3种类型的应用程序框架。

VC++使用MFC创建应用程序框架操作步骤ppt课件

VC++使用MFC创建应用程序框架操作步骤ppt课件

〔4〕出现新工程信息对话框〔New Project Information〕,阐明了所创建的 骨架工程的有关信息。如下图。
所创建的程序是一个基于对话框的Win32运 用程序,将自动创建两个类: 运用程序类CTalkcApp,对应的文件是 talkc.h和talkc.cpp; 对话框类CTalkcDlg,对应的文件是 talkcDlg.h和talkcDlg.cpp。 支持Windows Socket 运用共享的DLL实现MFC42.DLL。
〔2〕出现MFC AppWizard设置的第一步对话框〔MFC AppWizard – Step 1〕,如下图。从中选择Dialog based的运用程序类型,言语支持选择中文 〔中国〕,使此工程可以正确地进展中文的输入、输出、显示及处置。然后 点击NEXT按钮。
〔3〕出现MFC AppWizard设置的第二步对话框〔MFC AppWizards – Step 2 of 4〕,如下图,在Windows Sockets复选框上打上选择标志,表示运用程序 将支持WinSock套接字。接受其它的默许设置。跳过后面的步骤,直接点击 Finsh按钮。
点菜单View/ClassWizard...,进入类导游对话框, 选择Message Maps〔音讯映射〕卡,确认Class name 是CMySocket,从Messages〔音讯〕栏中选择事件音 讯,然后点击Add Function按钮,就会看到在Member Function栏中添加了相应的事件处置函数。
IDC_LIST_RECEIVED
m_listRecetved
Control
CListBox
定义了一个枚举变量IDD,值 为IDD_TALKC_DIALOG。 这个对话框类就是经过这个 IDD和对话框资源建立了联络。

《MFC应用开发技术》课件01

《MFC应用开发技术》课件01

贵州大学人民武装学院
内部交流学习之用 主要向导类型
Datebase Project:创建数据库项目 MFC ActiveX Control Wizard:创建基于MFC的ActiveX控件 MFC AppWizard[dll]:创建基于MFC的动态链接库 MFC AppWizard[exe]:创建基于MFC的应用程序(最常用) New Database Wizard:在SQL服务器上创建一个SQL Server数 据库 Win32 Application:创建Win32应用程序,可不使用MFC,采 用SDK方法编程 Win32 Console Application:创建DOS下的Win32控制台应用程 序,采用C++或C语言进行编程 Win32 Dynamic-link Library:创建Win32动态链接库,采用 SDK方法 Win32 Static Library:创建Win32静态链接库,采用SDK方法
内部交流学习之用
贵州大学人民武装学院
内部交流学习之用
贵州大学人民武装学院
内部交流学习之用
贵州大学人民武装学院
MFC AppWizard[exe]创建应用程序的类型: :
内部交流学习之用
Single document:单文档界面应用程序,程序运 行后出现标准的Windows界面,它由框架(包括 菜单栏、工具栏和状态栏)和用户区组成。并且 程序运行后一次只能打开一个文档,如Windows 自带的记事本Notepad。 Multiple documents documents:多文档界面应用程序,程序 运行后出现标准的Windows界面,并且可以同时 打开多个文档,如Word。 Dialog based:基于对话框的应用程序,程序运行 后首先出现一个对话框界面,如计算器Calculator。

基于MFC应用技术开发 实验指导书

基于MFC应用技术开发 实验指导书

职业技术、职业师范学院《基于MFC应用技术开发》实验指导书适用专业:计算机科学与技术专业贵州大学二OO九年二月前言曾经使用过传统的 Windows 编程方法开发过应用程序的读者应该深刻地体会到,即使是开发一个简单的 Windows 应用程序也需要对 Windows 的编程原理有很深刻地认识,同时也要手工编写很多代码。

而且程序的出错率几乎是随着代码长度的增加呈几何级数增长的,这使得调试程序变得非常困难,所以传统的Windows 编程是需要极大的耐心和丰富的编程经验的。

MFC 的本质就是一个包含许多微软公司已经定义好的对象的类库,虽然用户要编写的程序在功能上是千差万别的,但从本质上来讲,都可以划分为对用户界面的设计、对文件的操作、多媒体的使用、数据库的访问等方面,这也是微软提供 MFC 类库最重要的原因,在这个类库中包含了一百多个程序开发过程中最常用到的对象。

在进行程序设计时,如果类库中的某个对象能完成所需要的功能,则只要简单地调用已有对象的方法就可以了。

还可以利用面向对象技术中很重要的“继承”方法从类库中的已有对象派生出自己的对象,这时派生出来的对象除了具有类库中的对象的特性和功能外,还可以由用户自己根据需要加上所需要的特性和方法,从而产生一个专门的、功能更为强大的对象。

当然也可以在程序中创建全新的对象,并根据需要不断完善对象的功能。

正是由于 MFC 编程方法充分利用了面向对象技术的优点,使得编程时不必关心对象方法的实现细节,同时类库中的各种对象足以完成程序中的绝大部分功能,从而大幅度减少应用程序中编写的代码,有力地保证了程序的良好性和可调试性。

基于MFC应用技术开发是计算机科学技术专业的一门重要的选修课,学生通过实验课,理论结合实践,熟悉MFC的设计原理、掌握MFC库的消息映射、掌握管理单文档、视图的SDI程序设计方法,熟悉常见对话框应用、掌握常见按钮控件、编辑控件使用方法;了解基本的MFC图形应用程序设计方法、掌握基本的多媒体程序设计方法、了解套接字网络应用程序、了解浏览器应用程序设计方法。

《MFCC教程》PPT课件

《MFCC教程》PPT课件

数据类型
描述
BOOL
布尔值,取值范围TRUE和FALSE
BSTR
32位字符指针
BYTE
8位无符号整数
COLORREF
用作颜色值的32位数值
DWORD
32位无符号整数,或者段的地址和与之相关的偏移量
LONG
32位有符号整数
LPARAM
32位值,作为窗口函数或回调函数的参数
LPCSTR
指向字符串常量的32位指针
Windows程序以窗口的形式存在,在不同窗口之 间传递消息是Windows和应用程序进行交流的主 要形式。程序具体功能由不同的窗口函数实现。
1.2 句柄
• 在Windows中,用句柄(Handle)标识应用程 序中不同的对象和同类对象中不同的实例,如一 个具体的窗口、按钮、输出设备、画笔和文件等。 通过句柄可以获得相应的对象信息。常用的句柄 类型有: HWND 、 HINSTANCE 、 HDC 、 HCURSOR、HICON、HMENU等。
is not A or a !","KEYDOWN",NULL);
2MFC的基本原理和使用方法
利用Windows API开发程序的用户有这样的体 会,即使开发一个简单的Windows应用程序也需 要对Windows的编程原理有很深刻的认识,需要 手工编写冗长的代码。由于程序的出错率是随着代 码长度的增加呈几何级数增长的,而且当程序长度 逐渐膨胀时,调试程序会变得越来越困难。因此, 传统的Windows应用程序设计需要程序员有极大 的耐心和丰富的编程经验。
先定义一个句柄,然后调用MFC类的成员函数Attach()将 句柄与一个MFC类对象联系在一起,此时的句柄就成为 该MFC类对象的句柄。在退出对象作用域之前,调用成 员函数Detach()将句柄和对象进行分离。如下所示: CWnd myWnd; HWND hWnd; myWnd.Attach(hWnd); ...... myWnd.Detach();
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档