1、第十三章第十三章 MFCMFC库与库与WindowsWindows程序开发概述程序开发概述清华大学清华大学 郑郑 莉莉C+语言程序设计C+语言程序设计清华大学 郑莉2本章主要内容本章主要内容lWindows程序的基本结构程序的基本结构lMFC库简介库简介l使用使用Visual C+开发开发Windows程序程序C+语言程序设计清华大学 郑莉3Windows程序的基本结构程序的基本结构开始执行初始化应用初始化和创建应用窗口进入消息循环并从消息队列得到一个消息当前消息是否“退出”?终止执行程序是否定义了对此消息的处理进行默认处理处理消息否否是是C+语言程序设计清华大学 郑莉4WinMain()函数
2、函数l初始化应用初始化应用l初始化和创建应用窗口初始化和创建应用窗口l进入应用程序的消息循环进入应用程序的消息循环C+语言程序设计清华大学 郑莉5窗口过程窗口过程WndProc()执行窗口的消息处理:执行窗口的消息处理:分析消息信息,决定应用程序如何分析消息信息,决定应用程序如何处理消息或响应一个事件。处理消息或响应一个事件。C+语言程序设计清华大学 郑莉6MFC库库l类库是一个可以在应用程序中使用的类库是一个可以在应用程序中使用的相互关联的类的集合。相互关联的类的集合。lMFC库库Microsoft 基本类库是一基本类库是一个个Windows应用程序框架,它定义了应用程序框架,它定义了应用程
3、序的结构,并实现了标准的用应用程序的结构,并实现了标准的用户接口:户接口:管理窗口、菜单、对话框,实现基本的输入/输出和数据存储。MFC库简介C+语言程序设计清华大学 郑莉7应用程序框架应用程序框架l应用程序框架是一种类库的超集应用程序框架是一种类库的超集l在程序运行时,流程的控制多数是由在程序运行时,流程的控制多数是由框架实现的。框架实现的。l应用应用MFC框架来构造应用程序时,程框架来构造应用程序时,程序员的角色就是提供应用程序专用的序员的角色就是提供应用程序专用的代码,并指定这些代码是用来响应哪代码,并指定这些代码是用来响应哪些消息和命令的,以使框架能够在消些消息和命令的,以使框架能够在
4、消息和代码间建立联系。息和代码间建立联系。MFC库简介C+语言程序设计清华大学 郑莉8文档文档视图视图结构结构l应用程序框架的核心是应用程序框架的核心是文档文档视图视图结构。结构。MFC通过通过文档文档视图视图结构为结构为应用程序提供一种将数据与视图相分应用程序提供一种将数据与视图相分离的存储方式。离的存储方式。文档类的作用是将应程序的数据保存在文档类对象中,以及从磁盘文件中读或向磁盘文件中写数据。视图类的作用是显示数据和编辑数据。MFC库简介C+语言程序设计清华大学 郑莉9使用使用Visual C+开发开发Windows程序程序l建立一个应用程序框架建立一个应用程序框架l观察自动生成的应用程
5、序观察自动生成的应用程序l构造应用程序的用户接口构造应用程序的用户接口l将菜单映射到消息处理函数将菜单映射到消息处理函数l将工具栏按钮映射到命令将工具栏按钮映射到命令l测试自己编写的消息处理函数测试自己编写的消息处理函数l增加对话框增加对话框l初始化、验证和提取对话框中的数据初始化、验证和提取对话框中的数据l创建新增的类创建新增的类l添加现成的组件到应用程序中添加现成的组件到应用程序中l实现自己的文档类实现自己的文档类l实现实现Open、Save和和Save As命令命令l实现视图类实现视图类l改进缺省的打印改进缺省的打印l增加屏幕滚动增加屏幕滚动l创建表单视图创建表单视图l创建数据库表单创建
6、数据库表单l构造(构造(Build)、测试和调试应用程序)、测试和调试应用程序C+语言程序设计清华大学 郑莉例:人员信息管理程序例:人员信息管理程序l用用MFC设计一个人员信息管理程序的设计一个人员信息管理程序的界面界面 通过对话框输入人员信息 在窗口中显示人员信息10C+语言程序设计清华大学 郑莉Step 1:建立建立MFC工程工程11选中工程类型C+语言程序设计清华大学 郑莉Step 2:用向导配置工程用向导配置工程12选择应用程序类型C+语言程序设计清华大学 郑莉Step 3:添加对话框添加对话框13资源视图C+语言程序设计清华大学 郑莉Step 4:为对话框添加类为对话框添加类14输入
7、类名C+语言程序设计清华大学 郑莉Step 5:向对话框中添加控件向对话框中添加控件 15C+语言程序设计清华大学 郑莉Step 5:向对话框中添加控件向对话框中添加控件 16使用工具箱添加控件在属性列表中设置窗口文字C+语言程序设计清华大学 郑莉Step 6:为文本框添加变量为文本框添加变量17变量名变量类型C+语言程序设计清华大学 郑莉Step 7:编辑菜单编辑菜单18添加新的菜单项C+语言程序设计清华大学 郑莉Step 8:为菜单项添加事件处理程序为菜单项添加事件处理程序19选择事件处理程序所属类C+语言程序设计清华大学 郑莉Input Data菜单项处理菜单项处理(1)const ch
8、ar const char*const EMPLOYEE_FILE_NAME=employee.txt;const EMPLOYEE_FILE_NAME=employee.txt;void CMy13_1View:void CMy13_1View:OnTestInputdataOnTestInputdata()()Manager m1;Manager m1;Technician t1;Technician t1;SalesManagerSalesManager sm1;sm1;Salesman s1;Salesman s1;vectorEmployee vector employees;emp
9、loyees;employees.push_backemployees.push_back(&m1);(&m1);employees.push_backemployees.push_back(&t1);(&t1);employees.push_backemployees.push_back(&sm1);(&sm1);employees.push_backemployees.push_back(&s1);(&s1);CInputDialogCInputDialog input;input;input.DoModalinput.DoModal();();/设置姓名设置姓名m1.setName(in
10、put.m_str1.GetString();m1.setName(input.m_str1.GetString();t1.setName(input.m_str2.GetString();t1.setName(input.m_str2.GetString();sm1.setName(input.m_str3.GetString();sm1.setName(input.m_str3.GetString();s1.setName(input.m_str4.GetString();s1.setName(input.m_str4.GetString();20C+语言程序设计清华大学 郑莉Input
11、Data菜单项处理菜单项处理(2)t1.setWorkHours(t1.setWorkHours(input.m_hoursinput.m_hours);/);/设置工作时间设置工作时间sm1.setSales(input.m_ss1);/sm1.setSales(input.m_ss1);/设置本月的销售总额设置本月的销售总额s1.setSales(input.m_ss2);/s1.setSales(input.m_ss2);/设置本月销售额设置本月销售额ofstreamofstream out(EMPLOYEE_FILE_NAME);out(EMPLOYEE_FILE_NAME);/创建一
12、个输出文件流对象创建一个输出文件流对象for(vectorEmployee for(vector:iteratoriterator iteriter=employees.beginemployees.begin();();iteriter!=!=employees.endemployees.end();();+iteriter)(*iteriter)-promote();)-promote();(*iteriter)-pay();)-pay();/计算月薪计算月薪out (out)-getNamegetName()“()“编号编号”)-getIndividualEmpNogetIndividu
13、alEmpNo()“()“,级别为,级别为”(”getGradegetGrade()()“级,本月工资级,本月工资 ()-getAccumPaygetAccumPay()()endlendl;out.closeout.close();();21C+语言程序设计清华大学 郑莉Output Data菜单项处理菜单项处理void CMy13_1View:void CMy13_1View:OnTestOutputdataOnTestOutputdata()()ifstreamifstream in(EMPLOYEE_FILE_NAME);in(EMPLOYEE_FILE_NAME);/创建一个输入文件
14、流对象创建一个输入文件流对象if(!in)if(!in)MessageBoxMessageBox(File doesnt existed!);(File doesnt existed!);return;return;/从文件读入人员信息从文件读入人员信息CClientDCCClientDC dc(this);dc(this);intint i i=0;=0;while(true)while(true)string line;string line;getlinegetline(in,line);(in,line);if(!in)break;if(!in)break;dc.TextOutdc.T
15、extOut(100,100,(100,100,人员信息管理系统:人员信息管理系统:););dc.TextOutdc.TextOut(100,150+30(100,150+30*(i i+),+),line.c_strline.c_str();();in.closein.close();();22C+语言程序设计清华大学 郑莉Step 9:添加添加Employee相关文件相关文件l将将Employee.h和和Employee.cpp加入加入工程工程l在在13_1View.cpp中添加下列指令:中添加下列指令:#include Employee.h#include InputDialog.h#include#include#include using namespace std;23C+语言程序设计清华大学 郑莉程序运行结果程序运行结果主窗体主窗体24C+语言程序设计清华大学 郑莉程序运行结果程序运行结果输入对话框输入对话框25C+语言程序设计清华大学 郑莉程序运行结果程序运行结果结果输出结果输出26C+语言程序设计清华大学 郑莉27小结与复习建议小结与复习建议l主要内容主要内容 简单介绍Windows图形界面程序设计基础知识和基本设计思路。l达到的目标达到的目标 简单了解Windows环境下的应用程序开发l实验任务实验任务 实验十三