MFC基本应用程序的建立.ppt
《MFC基本应用程序的建立.ppt》由会员分享,可在线阅读,更多相关《MFC基本应用程序的建立.ppt(54页珍藏版)》请在三一办公上搜索。
1、第4章MFC基本应用程序的建立,4.1 Windows编程基础 4.2 编制一个MFC应用程序 4.3 使用MFC AppWizard 4.4 使用ClassWizard 作业,4.1Windows编程基础,简单的Windows应用程序 例Ex_HelloMsg 一个简单的Windows应用程序。#include int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)MessageBox(NULL,你好,我的Visual C+世界!,问候,0);return 0;运
2、行上述程序需要进行以下步骤:选择“File”“New”。单击Projects,选中Win32 Application项。在Project Name框中键入项目名称Ex_HelloMsg。在Location下的编辑框中直接键入文件夹名称,或单击Browse按钮(.)选择一个已有的文件夹。单击OK。选中An empty project项。单击Finish,单击OK系统将自动创建此应用程序。选择“File”“New”。单击File标签,在左边的列表框中选择C+Source File项,在右边的File框中键入Ex_HelloMsg.cpp,单击OK。,4.1Windows编程基础,输入上面的代码,运
3、行程序,如图。从程序可以看出:传统的DOS程序以main函数作为进入程序的初始入口点,但在Windows应用程序中,main函数被WinMain函数取而代之,WinMain函数的原型如下:int WINAPI WinMain(HINSTANCE hInstance,/当前实例句柄HINSTANCE hPrevInstance,/前一实例句柄LPSTR lpCmdLine,/指向命令行参数的指针int nCmdShow)/窗口的显示状态句柄是一个标识Windows资源(如菜单、图标、窗口等)和设备等对象的变量,或者是一个对操作系统资源的间接引用。每一个Windows应用程序都需要Windows.
4、h头文件,它还包含了其他的一些Windows头文件。这些头文件定义了Windows的所有数据类型、函数调用、数据结构和符号常量。MessageBox是一个Win32 API(Application Programming Interface,应用程序接口)函数,用来弹出一个对话框窗口,显示短信息。该函数第一个参数用来指定父窗口句柄,即对话框所在的窗口句柄。第二、三个参数分别用来指定显示的消息内容和对话框窗口的标题,最后一个参数用来指定在对话框中显示的按钮。,图4.1 Ex_HelloMsg运行结果,4.1Windows编程基础,例Ex_HelloWin 一个完整的Windows应用程序。#in
5、clude LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);/窗口过程int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)HWND hwnd;/窗口句柄 MSG msg;/消息 WNDCLASSwndclass;/窗口类 wndclass.style=CS_HREDRAW|CS_VREDRAW;wndclass.lpfnWndProc=WndProc;wndclass.cbClsExtra=0;wndclass.
6、cbWndExtra=0;wndclass.hInstance=hInstance;wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.lpszMenuName=NULL;wndclass.lpszClassName=“HelloWin”;/窗口类名 if(!RegisterClass(,4.1Windows编程基础,hwnd=Cre
7、ateWindow(HelloWin,/窗口类名 我的窗口,/窗口标题 WS_OVERLAPPEDWINDOW,/窗口样式 CW_USEDEFAULT,/窗口最初的 x 位置 CW_USEDEFAULT,/窗口最初的 y 位置 CW_USEDEFAULT,/窗口最初的 x 大小 CW_USEDEFAULT,/窗口最初的 y 大小 NULL,/父窗口句柄 NULL,/窗口菜单句柄 hInstance,/应用程序实例句柄 NULL);/创建窗口的参数 ShowWindow(hwnd,nCmdShow);/显示窗口 UpdateWindow(hwnd);/更新窗口,包括窗口的客户区/进入消息循环:当
8、从应用程序消息队列中检取的消息是WM_QUIT时,则退出循环。while(GetMessage(,4.1Windows编程基础,LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)switch(message)case WM_CREATE:/窗口创建产生的消息return 0;case WM_LBUTTONDOWN:MessageBox(NULL,你好,我的Visual C+世界!,问候,0);return 0;case WM_DESTROY:/当窗口关闭时产生的消息PostQuitMessag
9、e(0);return 0;return DefWindowProc(hwnd,message,wParam,lParam);/执行默认的消息处理,4.1Windows编程基础,程序运行,单击鼠标左键,如图。窗口过程函数WndProc用来接收和处理各种不同的消息,WinMain函数通常要完成:调用API函数RegisterClass注册应用程序的窗口类。调用相关API函数创建和显示窗口,并进行必要的初始化。CreateWindow创建已注册窗口类的窗口。Windows每一个窗口都有一些基本属性。窗口类就是充当这些属性的模板。创建和启动应用程序的消息循环。Windows应用程序接受各种不同的消息
10、。Windows系统首先将消息放入消息队列中,应用程序的消息循环就是从应用程序的消息队列中检取消息,并将消息发送相应的窗口过程函数中作进一步处理。如果接收到WM_QUIT消息,则退出应用程序,图4.2 Ex_HelloWin运行结果,4.1Windows编程基础,应用程序的基本流程,如图。,图4.3 Windows应用程序的基本流程,4.1Windows编程基础,Windows编程特点 消息驱动机制 DOS程序是通过调用系统的函数来获得用户输入的,Windows程序则是通过操作系统发送的消息来处理用户输入的。无论是系统产生的动作或是运行应用程序产生的动作,都称为事件(Events)产生的消息(
11、Message)。在应用程序中,通过接收消息、分发消息、处理消息来和用户进行交互。许多消息都经过了严格的定义,并且适用于所有的应用程序。图形设备接口(GDI)DOS环境中,要在打印机上打印一幅图形是非常复杂的事件。Windows则提供了一个抽象的接口,称为图形设备接口(Graphical Device Interface,简称GDI),使得用户直接利用系统的GDI函数就能方便实现输入或输出,而不必关心与系统相连的外部设备的类型。基于资源的程序设计Windows应用程序常常包含众多图形元素,每一个这样的元素都作为一种可以装入应用程序的资源来存放。这些资源可以被编辑、修改,也可以被其他应用程序所共
12、享。VC中提供的许多编辑器能“所见即所得”地进行不同类型资源的设计、编辑等。,4.1Windows编程基础,动态链接库提供一些特定结构的函数,能被应用程序在运行过程中装入和连接,多个程序可以共享同一个动态链接库。从编程角度,动态链接库可以提高程序模块的灵活性,它本身是可以单独设计、编译和调试的。Windows提供了应用程序可利用的丰富的函数调用,大多数用于实现其用户界面和在显示器上显示的文本和图形,都是通过动态链接库来实现的。Windows中,KERNEL32用来处理存储器低层功能、任务和资源管理等核心服务;GDI32用来提供图形设备接口,管理用户界面和图形绘制;USER32负责窗口的管理。进
13、程和线程Windows是一个32位多任务操作系统,采用进程和线程的管理模式。进程是装入内存中正在执行的应用程序。进程包括私有的虚拟地址空间、代码、数据及其它操作系统资源。进程包括了一个或多个在进程上下文内运行的线程。线程是操作系统分配CPU时间的基本实体。线程可以执行应用程序代码的任何部分,包括当前正在被其它线程执行的那些部分。同一进程的所有线程共享同样的虚拟地址空间、全局变量和操作系统资源。一个应用程序,包括一个或多个进程,每个进程由一个或多个线程构成。,4.1Windows编程基础,Windows基本数据类型,4.1Windows编程基础,需要说明的是:这些基本数据类型都是以大写字符出现。
14、凡是数据类型的前缀是P或LP,表示该类型是一个指针或长指针数据类型。前缀是H,表示是句柄类型。前缀是U,表示是无符号数据类型。还提供一些宏来处理上述基本数据类型。LOBYTE和HIBYTE分别用来获取16位数值中的低位和高位字节;LOWORD和HIWORD分别用来获取32位数值中的低位和高位字;MAKEWORD是将两个16位无符号值结合成一个32位无符号值。,4.2编制一个MFC应用程序,MFC概述1987年微软公司推出了第一代Windows产品,并为应用程序设计者提供了Win16 API,在此基础上推出了Windows GUI(图形用户界面),然后采用面向对象技术对API进行封装。1992年
15、推出应用程序框架产品AFX(Application Frameworks),并在AFX的基础上进一步发展为MFC产品。MFC类的基本层次结构如图。,4.2编制一个MFC应用程序,设计一个MFC程序例Ex_HelloMFC 一个MFC应用程序。#include/MFC头文件class CHelloApp:public CWinApp/声明应用程序类public:virtual BOOL InitInstance();CHelloApp theApp;/建立应用程序类的实例class CMainFrame:public CFrameWnd/声明主窗口类public:CMainFrame()/创建主
16、窗口Create(NULL,我的窗口,WS_OVERLAPPEDWINDOW,CRect(0,0,400,300);protected:afx_msg void OnLButtonDown(UINT nFlags,CPoint point);DECLARE_MESSAGE_MAP();/消息映射入口BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_WM_LBUTTONDOWN()/单击鼠标左键消息的映射宏END_MESSAGE_MAP(),4.2编制一个MFC应用程序,void CMainFrame:OnLButtonDown(UINT nFlags,CPoi
17、nt point)MessageBox(你好,我的Visual C+世界!,问候,0);CFrameWnd:OnLButtonDown(nFlags,point);/每当应用程序首次执行时都要调用的初始化函数BOOL CHelloApp:InitInstance()m_pMainWnd=new CMainFrame();m_pMainWnd-ShowWindow(m_nCmdShow);m_pMainWnd-UpdateWindow();return TRUE;运行上述MFC程序需要进行以下步骤:选择“File”“New”。单击Projects,选中Win32 Application项,创建一
18、个Ex_HelloMFC空应用程序项目。选择“File”“New”。单击File标签,在左边的列表框中选择C+Source File项,在右边的File框中键入Ex_HelloMsg.cpp,单击OK。输入上面的代码。选择“Project”“Settings”,选择“General”标签。在“Microsoft Foundation Classes”组合框中,选择“Use MFC in a Shared DLL”。单击OK。程序运行后,单击鼠标左键,就会弹出一个对话框,结果同Ex_HelloWin。,4.2编制一个MFC应用程序,理解程序代码 MFC是使用afxwin.h来代替头文件windo
19、ws.h。运行应用程序时,自动调用应用程序框架内部的WinMain函数,并自动查找该应用程序类CHelloApp(从CWinApp派生)的全局变量theApp,然后自动调用CHelloApp的虚函数InitInstance,该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。上述程序中InitInstance的执行过程。首先执行的是:m_pMainWnd=new CMainFrame();创建从CFrameWnd类派生而来的用户框架窗口CMainFrame类对象,继而调用该类的构造函数,使得Create函数被调用,完成了窗口创建工作。然后执行后面两句:m_pMainWnd-ShowWin
20、dow(m_nCmdShow);m_pMainWnd-UpdateWindow();用作窗口的显示和更新。最后返回TRUE,表示窗口创建成功。由于应用程序类CWinApp是用来调用WinMain以及实例的初始化,因此每一个MFC应用程序有且只能一个这样的应用程序类,且需要一个全局的对象实例,如上述程序中的theApp。,4.2编制一个MFC应用程序,InitInstance完成初始化后,调用基类CWinApp的成员函数Run,执行应用程序的消息循环。Run检查到消息队列为空时,调用基类CWinApp的成员函数OnIdle进行空闲时的后台处理工作。若消息队列为空且又没有后台工作要处理时,则应用程
21、序一直处于等待状态,一直等到有消息为止。当程序结束后,调用基类CWinApp的成员函数ExitInstance,完成终止应用程序的收尾工作。在MFC中,一个消息的处理往往是通过独特的MFC消息映射机制来进行的。消息映射(Message Map)机制,指MFC类中将消息与消息处理函数联系起来,一一对应的机制。任何一个从类CCmdTarget派生的类理论上均可处理消息,且都有相应的消息映射函数。按照MFC的消息映射机制,映射一个消息的过程由三个部分组成:在处理消息的类中,使用消息宏DECLARE_MESSAGE_MAP()声明对消息映射的支持,并在该宏之前声明消息处理函数。使用BEGIN_MESS
22、AGE_MAP和END_MESSAGE_MAP宏在类声明之后的地方定义该类支持的消息映射入口点,所有消息映射宏都添加在这里,当然不同的消息MFC都会有不同的消息映射宏。定义消息处理函数。为了使该消息能被其他对象接收并处理,在函数中常常需要调用基类中的相关消息处理函数。MFC的ClassWizard(类向导)能自动完成消息的上述映射过程。,4.3使用MFC AppWizard,应用程序框架类型,4.3使用MFC AppWizard,创建一个单文档应用程序开始选择“File”“New”,选择Projects标签;选择MFC AppWizard(exe)的项目类型(该类型用于创建可执行的Window
23、s应用程序),将项目工作文件夹定位在“D:Visual C+6.0程序”,并在“Project Name”框中输入项目名Ex_SDIHello,如图,单击OK。,图4.5 MFC AppWizard的“New”对话框,4.3使用MFC AppWizard,第一步从应用程序类型Single Document、Multiple Document和Dialog Based中选择SDI。决定应用程序中是否需要MFC的“文档/视图”结构的支持。若不选定此项,则程序中的磁盘文件的打开、保存以及文档和视图的相互作用等功能需要用户来实现,且将跳过Step 2Step 5,直接弹出“Step 6”对话框。选择资
24、源所使用的语言,这里是“中文中国”,单击Next按钮。,图4.6 SDI的“Step 1”对话框,4.3使用MFC AppWizard,第二步单击Next按钮进入下一步。第三步单击Next按钮进入下一步。,图4.7 SDI的“Step 2”对话框,图4.8 SDI的“Step 3”对话框,4.3使用MFC AppWizard,第四步单击Next按钮进入下一步。,图4.9 SDI的“Step 4”对话框,4.3使用MFC AppWizard,第五步在弹出的对话框(如图)中出现三个方面的选项,供用户来选择:应用程序的主窗口是MFC标准风格还是窗口左边有切分窗口的浏览器风格;在源文件中是否加入注释用
25、来引导用户编写程序代码;使用动态链接库还是静态链接库。保留缺省状态,单击Next按钮进行下一步。,图4.10 SDI的“Step 5”对话框,4.3使用MFC AppWizard,第六步单击Finish按钮出现如图4.12所示的对话框,图4.11 SDI的“Step 6”对话框,图4.12 项目信息对话框,4.3使用MFC AppWizard,编译并运行,4.3使用MFC AppWizard,理解程序框架应用类CEx_SDIHelloApp下面首先来看看Ex_SDIHello应用程序的Ex_SDIHello.h文件:.class CEx_SDIHelloApp:public CWinApppu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 基本 应用程序 建立
链接地址:https://www.31ppt.com/p-6512440.html