收藏 分享(赏)

实习(第1天(下)_VC++编程基础).ppt

上传人:HR专家 文档编号:6628979 上传时间:2019-04-18 格式:PPT 页数:27 大小:224.50KB
下载 相关 举报
实习(第1天(下)_VC++编程基础).ppt_第1页
第1页 / 共27页
实习(第1天(下)_VC++编程基础).ppt_第2页
第2页 / 共27页
实习(第1天(下)_VC++编程基础).ppt_第3页
第3页 / 共27页
实习(第1天(下)_VC++编程基础).ppt_第4页
第4页 / 共27页
实习(第1天(下)_VC++编程基础).ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、2019/4/18,第1天 Visual C+编程基础,了解Windows编程基础:消息和事件、资源管理、设备独立性等概念 了解MFC类的基础知识 熟练掌握用向导建立应用程序框架 明确MFC应用程序结构,教学目标,2019/4/18,1.1 Windows编程概念 1.2 MFC基础 1.3 第一个MFC应用程序 1.4 应用程序分析,2019/4/18,1.1 Windows编程概念,返 回,Windows程序设计是基于事件驱动,程序的运行是由事件的发生来控制的。消息驱动机制是Windows程序设计的精髓。 1.1.1 事件与消息当用户按下一个键、移动鼠标或单击鼠标按钮时,计算机通知Wind

2、ows系统已经发生了一个事件,以及事件的种类、发生的时间和发生的位置(如坐标值)。事件以如下三种方式产生: 通过输入设备,如键盘和鼠标,产生硬件事件。 通过屏幕上可视的对象,如菜单、工具栏按钮、滚动条和对话框上的控件。 来自Windows内部,例如,当一个后面的窗口显示到前面来。Windows消息是在Windows.h文件中用宏定义的常数。消息常数名通常为WM_XXX,例如,WM_WUIT、WM_CHAR。例如:当用户单击鼠标左键时,将发送WM_LBUTTONDOWN消息,而双击则发送WM_LBUTTONDBLCLK消息。,2019/4/18,1.1.2 消息驱动DOS程序是由一系列预先定义好

3、的操作序列的组合,具有一定的开头、中间过程和结束,也就是程序直接控制程序事件和过程的顺序。它的基本模型如图1-1(a)所示。事件驱动的程序设计不是由事件的顺序来控制,而是由事件的发生来控制,而这种事件的发生是随机的、不确定的,并没有预定的顺序。它在程序设计过程中除了完成所需功能之外,更多地考虑了用户的各种输入,并根据需要设计相应的处理程序。程序开始运行时,处于等待用户输入事件状态,然后取得事件并作出相应反应,处理完毕又返回并处于等待事件状态。如图1-1(b)所示。,2019/4/18,1.1.3 消息响应函数消息响应函数是用于处理特定消息的一些代码。例如,当用户点击某菜单项时,希望程序弹出一个

4、口令对话框,那么,只要在相应的消息处理函数中编写弹出一个口令对话框的代码。 1.1.4 资源管理程序员设计任何应用程序均将涉及到诸如菜单、对话框、消息框以及按钮等标准格式数据。Windows将这些数据保存在资源文件中,程序员可通过编辑工具编辑、修改这些资源文件,使其提供所需的菜单或按钮,并将其放入设计的程序之中。1.1.5 设备独立性设备独立性或称设备无关性。在编程时,程序员不必关心诸如打印机、鼠标、键盘、显示器、声卡、显示卡、CDROM等多种设备的类型及其驱动程序。Windows95/98/2000提供了图形设备接口之类的各种抽象接口,使得在程序中可以通过调用标准函数与硬件交互,这些函数通过

5、设备环境的数据结构,由Windows操作系统将其映射到相应的物理设备,而程序员则无需了解其提供的操作设备的各种指令。,返 回,2019/4/18,1.2 MFC基础,VC+已集成了MFC库,VC+资源编辑器、AppWziard和ClassWizard明显降低了应用程序编码的时间。AppWziard为整个应用程序生成框架代码,同时ClassWizard为消息处理程序生成原型和函数体。 1.2.1 MFC类库简介 MFC(Microsoft Foundation Class)类库是用来编写Windows应用程序的C+类集,封装了大部分Windows API函数,所以使用MFC类库和VC+提供的高度

6、可视化的应用程序开发工具,使开发变得简单。 MFC类库包括CObject类及其派生类以及其他类。有这样一些重要的类(都是CObject的派生类): 应用程序类CWinApp。 CWnd类及派生类。 CDocument及其派生类。 File Services。 Graphical Drawing。 Graphical Drawing Objects。 Menus。 ODBC Database和DAO Database Support。 Internet Services。等等。,返 回,2019/4/18,1.2.2 MFC应用程序框架在VC+6.0中,MFC AppWizard能方便地生成应用

7、程序框架,然后在此基础上进行进一步的编辑工作。MFC AppWizard生成的应用程序包括这样一些要素: WinMain函数。Windows要求应用程序必须有一个WinMain函数,它隐藏在应用程序框架中。 应用程序类。也称CMyHelloApp。该类的每一个对象代表一个应用程序。程序中默认定义一个全局CMyHelloApp对象,即theApp。 应用程序启动。启动应用程序时,Windows调用应用程序框架内置的WinMain函数,WinMain寻找CWinApp由派生出的全局构造的应用程序对象。 成员函数CMyHelloApp:InitInstance。当WinMain函数找到应用程序对象时

8、,它调用伪成员函数InitInstance,这个成员函数调用所需的构造并显示应用程序的主框架窗口。必须在派生的应用程序类中重载InitInstance,因为CWinApp基类不知道需要什么样的主框架窗口。 成员函数CWinApp:Run。函数Run隐藏在基类中,但是它发送应用程序的消息到窗口,以保持应用程序的正常运行。在WinMain调用InitInstance之后,便调用Run。,2019/4/18, CMainFrame类。类CMainFrame的对象代表应用程序的主框架窗口。当构造函数调用基类CFrameWnd的成员函数Create时,Windows创建实际窗口结构,应用程序框架把它连接

9、到C+对象,函数ShowWindows和UpdateWindow也是基类的成员函数,必须调用它们类显示窗口。 文档与视图类。这一部分比较复杂,会在后面的章节中单独提出详细讲解。 关闭应用程序。如果用户通过关闭主框架窗口类关闭应用程序,这个操作就将激发一系列事件的发生,包括CMainFrame对象的析构、从Run中退出、从WinMain中退出和CMyHelloApp对象的折构。,2019/4/18,1.2.3 MFC消息映射及处理在MFC中,管理消息的方式是:当发生某一个消息(比如用户移动了鼠标和按下键盘等)该消息进入消息队列,操作系统根据消息提供的信息决定由那个应用程序来处理,该应用程序依照一

10、定的方式查找应用程序中各个类的消息映射(一组宏,这些宏用来确定某个消息及相应的处理程序的对应关系)找到处理程序,然后由处理程序执行。 MFC程序要处理消息的种类如下: Windows消息。以WM_开头,但WM_COMMAND例外。通常由窗口和视图来处理。 由控件和其他子窗口发送给父窗口的WM_COMMAND消息。这些消息中包括EN_CHANGE通知码。如当用户在编辑框中键入文本或进行修改,就回向系统发送一个带EN_CHANGE通知码的WM_COMMAND消息。 来自于用户界面对象的WM_COMMAND消息,如表1-1所示。这些用户界面对象包括菜单、工具栏按钮和快捷键。系统在处理这些用户界面对象

11、的消息和前面有所不同,我们来看看标准的处理方式。,返 回,2019/4/18,1.2.4 程序的运行过程如图1-2所示,当运行用户应用程序时,程序中的框架首先获得控制权,然后依次执行下述功能: (1) 做部分初始化工作。 (2) 构造应用程序的唯一应用类的对象,构造应用类对象时要调用其构造函数。 (3) 调用WinMain()函数(此函数也隐藏在应用框架内部)。 (4) 从WinMain()函数返回后,删除应用程序的唯一应用类的对象,删除时要调用其析构函数。 (5) 终止应用程序。 (6) 进行退出应用程序前的收尾工作,如删除注册的窗口类并释放其内存等。 (7) 返回,返 回,2019/4/1

12、8,1.3 第一个MFC应用程序,用VC+编写MFC应用程序,是一种“填空式”的编程方法,一般有三个步骤:(1) 创建工程:用V C+的MFC AppWizard生成应用程序的工程文件,即应用程序的基本框架。(2)可视化设计:用VC+自带的工具软件Winzards,制作Windows风格的图形用户界面和各种控件。(3)编写代码:用MFC ClassWizard添加消息响应函数,然后VC+提供的文本编辑器和C+程序设计语言在函数中编写代码。,返 回,2019/4/18,1.3.1 MyHello应用程序例程MyHello.exe运行结果如下图所示。主窗口显示字符串:“Hello,我们开始Visu

13、al C+编程了!”。 MyHello程序由以下两步完成: (1) 用VC+6.0的MFC AppWizard,创建应用程序的基本窗口框架。 (2) 编写显示字符串:“Hello,我们开始Visual C+编程了!”的代码。,2019/4/18,(1) 启动VC+,从“File”菜单中选择“New”; (2) 在New对话框中选择“Project”标签 ,选择“MFC AppWizard(exe)”类型,告诉VC+即将创建一个EXE程序。(3) 在 “Project name”文本编辑框中输入“MyHello”,单击位于“Location”框右边的小按钮,再从下拉的对话框中选择“D:MYVC”

14、目录,使新创建的工程文件放置在“D:MYVC”目录之下。(分别指定了MyHello.exe程序的工程类型、工程名字和工程位置),1.3.2 创建工程,2019/4/18,(4) 单击“OK”按钮。此时Visual C+将显示MFC AppWizard-Step 1对话框。 (5)在MFC AppWizard-Step 1对话框中: Single Document选项表示单文档界面,简称SDI,这种类型应用程的主窗口只能容纳一个文档,如Windows自带的记事本。 Multiple documents选项表示多文档界面,简称MDI,这种类型应用程容许同时打开多个文档,这些文档可以层叠于主窗口。M

15、icrosoft Office产品就属于MDI应用程。 Dialog based选项表示生成基于对话框的应用程序。 在本例中选择“Single Document”,创建一个基于单文档界面的应用程序。然后选择资源语言。,2019/4/18,(6) 单击“Finish” 按钮,结束MFC AppWizard的设计工作,此时Vc+将显示New Project Information窗口,显示前六步所做的选择的汇总信息。 (7) 单击“OK”。VC+就创建了MyHello工程以及相关的所有文件。,2019/4/18,1.3.3 编写程序代码用VC+编写MFC应用程序,是一种“填空式”的编程方法,因为在

16、利用MFC AppWizard生成框架程序,使得程序员免去了大量模式化工作,我们只要根据目标程序的要求,看哪些地方需要修改,再往里填写代码。在Workspase窗口的FileView标签(工程资源管理器)中选择MyHelloView.cpp文件双击打开,然后找到函数OnDraw(CDC* pDC),在其中添加显示字符串:“Hello, 我们开始Visual C+编程了!“代码。 void CMyHelloView:OnDraw(CDC* pDC) CMyHelloDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code

17、 for native data herepDC-TextOut(100,80,“Hello, 我们开始Visual C+编程了!“); ,2019/4/18,1.3.4 编译运行MyHello应用程序编译、连接运行的操作步骤如下: (1) 如下图所示,选择“Build”菜单中的“Build MyHello.exe”菜单项, VC+就会编译并连接成MyHello.exe程序。 (2) 选择“Build”菜单中的“Execute MyHello.exe”菜单项, VC+就会执行MyHello.exe程序,MyHello.exe程序主窗口也随之出现。,2019/4/18,1.4 应用程序分析,返

18、回,用MFC AppWizard来帮助生成程序时,MFC类做了很多工作,使用户很容易地就能够编写一个程序。打开Workspace窗口中的ClassView(类视图)标签,我们看到MFC生成了5个类,如图1-13所示。 CAboutDlg CMainFrame CMyHelloApp CMyHelloDoc CMyHelloView对应每一个类MFC Wizard为我们生成了两个文件,分别以.h和.cpp结尾,在h文件中MFC Wizard定义了类和它的各种变量、函数,在.cpp文件中来生成类对象,实现这个类。,2019/4/18,1.4.1 应用类CMyHelloApp,返 回, 应用类CMy

19、HelloApp派生于MFC中的CWinApp类 其作用是初始化应用程序及运行该应用程序所需要的成员函数,而CWinApp类派生于CWinThread类,代表了程序中运行的主线程,它就是运行程序的本身,所以每一个基于MFC创建的应用程序只能包含该类唯一的派生类对象。MyHello.h是应用程序的主头文件,它声明了CMyHelloApp类,其中: 虚函数InitInstance()的作用是:设置注册数据库,载入标准设置(最近打开文件列表等)、注册文档模板并隐含地创建了主窗口、处理命令行参数和显示窗口,然后返回、进入消息循环。CMyHelloApp类的完整代码如下:,2019/4/18,class

20、 CMyHelloApp : public CWinApp public:CMyHelloApp();/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CMyHelloApp)public:virtual BOOL InitInstance();/AFX_VIRTUAL / Implementation/AFX_MSG(CMyHelloApp)afx_msg void OnAppAbout();/ NOTE - the ClassWizard will add and remove member

21、functions here./ DO NOT EDIT what you see in these blocks of generated code !/AFX_MSGDECLARE_MESSAGE_MAP() ;,2019/4/18,1.4. 2 主框架窗口类CMainFrame,返 回, 窗口类CMainFrame派生于CFrameWnd 主要用来管理应用程序的窗口,显示标题栏、工具栏、状态栏等。同时还要处理针对窗口操作的消息。在窗口类CMainFrame中有: 两个主要函数PreCreateWindow和OnCreate 两个对象m_wndStatusBar(属于状态栏类CStatus

22、Bar,用于创建管理状态栏)和m_wndToolBar(属于工具栏类CToolBar,用于创建管理工具栏)。类CMainFrame在MainFrm.h中定义,完整的代码如下:,2019/4/18,class CMainFrame : public CFrameWnd protected: / create from serialization onlyCMainFrame();DECLARE_DYNCREATE(CMainFrame)/AFX_VIRTUAL(CMainFrame)virtual BOOL PreCreateWindow(CREATESTRUCT,2019/4/18,1.4.3

23、 文档类CMyHelloDoc,返 回, 文档类CMyHelloDoc派生于CDocument类。 主要用来存放应用程序的数据,以及文件的保存加载功能,文档类要通过与视图类来实现与用户的交互。在文档类CMyHelloDoc中: 声明的OnNewDocument函数用于初始化文档,Serialize函数串行化(保存和装入)文档,Dump函数用于调试诊断。文档类类CMyHelloDoc的详细代码如下:,2019/4/18,class CMyHelloDoc : public CDocument protected: / create from serialization onlyCMyHelloD

24、oc();DECLARE_DYNCREATE(CMyHelloDoc) / ClassWizard generated virtual function overrides/AFX_VIRTUAL(CMyHelloDoc)public:virtual BOOL OnNewDocument();virtual void Serialize(CArchive,2019/4/18,1.4.4 视图类CMyHelloView,返 回, 视图类CMyHelloView派生于CView类 视图类用于管理视图窗口,它对应的对象在框架窗口中实现用户数据的显示和打印。在视图类CMyHelloView中有:与文档

25、数据相关的三个函数OnPreparePrinting、OnBeginPrintting和OnEndPrinting,用以实现数据打印;声明了返回CMYhelloDoc指针的函数GetDocument用以获取文档的指针,以实现对用户文档的数据的操作;声明了函数OnDraw,用以实现视图数据的显示和刷新。视图类CMyHelloView的详细代码如下:,2019/4/18,class CMyHelloView : public CView protected: / create from serialization onlyCMyHelloView();DECLARE_DYNCREATE(CMyHe

26、lloView)public:CMyHelloDoc* GetDocument();/ Operations public:/AFX_VIRTUAL(CMyHelloView)public:virtual void OnDraw(CDC* pDC); / overridden to draw this viewvirtual BOOL PreCreateWindow(CREATESTRUCT,2019/4/18,返 回,1Windows程序设计的特点是什么? 2Windows应用程序的优点是什么? 3. MFC AppWizard(应用向导)可以创建哪几类应用程序?各有何特点? 4. 请用MFC AppWizard创建一个基于对话框的应用程序,列出所创建的类,并与MyHello工程比较,观察他们的异同。,习 题,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报