第二部分 MFC编程——MFC基本应用程序的建立.ppt





《第二部分 MFC编程——MFC基本应用程序的建立.ppt》由会员分享,可在线阅读,更多相关《第二部分 MFC编程——MFC基本应用程序的建立.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二部分第二部分第二部分第二部分 MFCMFC程序设计程序设计程序设计程序设计MFC与与Windows编程基础编程基础Windows编程基础编程基础使用使用MFC AppWizard编制编制MFC应用程序应用程序MFC常见类介绍常见类介绍消息与消息驱动消息与消息驱动1/14/202321 Windows编程基础编程基础编编制制一一个个功功能能强强大大和和易易操操作作的的WindowsWindows应应用用程程序序所所需需要要的的代代码码肯肯定定会会比比一一般般的的C+C+程程序序要要多多得得多多,但但并并不不是是所所有有的的代代码码都都需需要要自自己己从从头头开开始始编编写写,因因为为Visu
2、al Visual C+C+不不仅仅提提供供了了常常用用的的WindowsWindows应应用用程程序序的的基基本本框框架架,而而且且可可以以在在框框架架程程序序中中直直接接调调用用Win32 Win32 APIAPI函函数数。这这样样,用用户户仅仅需需要要在在相相应应的的框框架架位位置置中中添添加加自自己己的的代代码码或或修修改改部部分分代代码码就就可可实实现现WindowsWindows应应用用程序的许多功能。程序的许多功能。1/14/20233Windows API:Application Programming Interface,应应用用程程序序接接口口,是是一一套套用用来来控控制制
3、整整个个Windows系系统统的的接接口口函函数数库库。Windows系系统统拥拥有有多多达达上上百百个个API函函数数,无无论论执执行行何何种操作,系统都会利用这些函数来进行一定的控制。种操作,系统都会利用这些函数来进行一定的控制。MFC:Microsoft Foundation Class Library,微微软软基基础础类类库库,以以C+形形式式封封装装的的Windows的的API函函数数的的类类库库。在在Visual C+6.0版版本本中中MFC大大约约包包含含200个个类类。利利用用MFC建建立立应应用用程程序序更更符符合合面面向向对对象象的的设设计计思思想想,利利用用向向导导创创建
4、应用程序可以隐藏许多设计细节,进而简化编程过程。建应用程序可以隐藏许多设计细节,进而简化编程过程。Windows SDK:Windows Software Development Kit,Windows软软件件开开发发工工具具包包.一一般般是是一一些些被被软软件件工工程程师师用用于于为为特特定定的的软软件件包包、软软件件框框架架、硬硬件件平平台台、操操作作系系统统等等建建立应用软件的开发工具的集合。立应用软件的开发工具的集合。1/14/202341.1 简单的简单的Windows应用程序应用程序#include int WINAPI WinMain(HINSTANCE hInstance,HI
5、NSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)MessageBox(NULL,你好,我的Visual C+世界!,问候,0);return 0;注意:项目类型为:Win32 Application1/14/20235C+控控制制台台应应用用程程序序以以main函函数数作作为为进进入入程程序序的的初初始始入入口口点点,但但在在Windows应应用用程程序序中中,main主主函函数数被被WinMain函函数数取取代代。WinMain函数的原型如下:函数的原型如下:int WINAPI WinMain(HINSTANCE hInstance,/
6、当前实例句柄当前实例句柄 HINSTANCE hPrevInstance,/前一实例句柄前一实例句柄 LPSTR lpCmdLine,/指向命令行参数的指针指向命令行参数的指针 int nCmdShow)/窗口的显示状态窗口的显示状态 所谓句柄是一个标识所谓句柄是一个标识Windows资源资源(如菜单、图标、窗口等如菜单、图标、窗口等)和和设备等对象的数据指针类型。通常,一个句柄变量可用来对系设备等对象的数据指针类型。通常,一个句柄变量可用来对系统中某些资源的间接引用。统中某些资源的间接引用。每一个每一个C+Windows应用程序都需要应用程序都需要Windows.h头文件,它还头文件,它还包
7、含了其他的一些包含了其他的一些Windows头文件。这些头文件定义了头文件。这些头文件定义了Windows的所有数据类型、函数调用、数据结构和符号常量。的所有数据类型、函数调用、数据结构和符号常量。程序中,程序中,MessageBox是一个是一个Win32 API函数,用来弹出一个消函数,用来弹出一个消息对话框。使用格式参见息对话框。使用格式参见MSDN1/14/202361.2 完整的完整的Windows应用程序应用程序#include#includeLRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HI
8、NSTANCE 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.cbWndExtra =0;wndclass.hInstance =hInstance;wndclass.hIcon =LoadIcon(NU
9、LL,IDI_APPLICATION);wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.lpszMenuName =NULL;wndclass.lpszClassName=HelloWin;/窗口类名窗口类名 1/14/20237if(!RegisterClass(&wndclass)/注册窗口注册窗口 MessageBox(NULL,窗口注册失败!窗口注册失败!,HelloWin,0);return 0;hwnd=C
10、reateWindow(HelloWin,我的窗口我的窗口,WS_OVERLAPPEDWINDOW,/窗口类名窗口类名,窗口标题窗口标题 ,窗口样式窗口样式 CW_USEDEFAULT,CW_USEDEFAULT,/窗口最初的窗口最初的 x 位置位置,窗口最初的窗口最初的 y 位置位置 CW_USEDEFAULT,CW_USEDEFAULT,/窗口最初的窗口最初的 x 大小大小,窗口最初的窗口最初的 y 大小大小 NULL,NULL,hInstance,NULL);/父窗口句柄父窗口句柄,窗口菜单句柄窗口菜单句柄,应用程序实例句柄应用程序实例句柄,创建窗口的参数创建窗口的参数 ShowWind
11、ow(hwnd,nCmdShow);/显示窗口显示窗口 UpdateWindow(hwnd);/更新窗口,包括窗口的客户区更新窗口,包括窗口的客户区 while(GetMessage(&msg,NULL,0,0)/进入消息循环:当从应用程序消息队列中检取的消息是进入消息循环:当从应用程序消息队列中检取的消息是WM_QUIT时,则退出循环。时,则退出循环。TranslateMessage(&msg);/转换某些键盘消息转换某些键盘消息 DispatchMessage(&msg);/将消息发送给窗口过程,这里是将消息发送给窗口过程,这里是WndProc return msg.wParam;1/14
12、/20238LRESULT 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_CHAR:char szChar400;sprintf(szChar,keyboard is pressed,the char is%c,wPar
13、am);MessageBox(hwnd,szChar,提示提示,0);break;case WM_RBUTTONDOWN:int t=strlen(鼠标右键点击鼠标右键点击);TextOut(GetDC(hwnd),100,100,鼠标右键点击鼠标右键点击,t);break;case WM_DESTROY:/当窗口关闭时产生的消息当窗口关闭时产生的消息PostQuitMessage(0);return 0;return DefWindowProc(hwnd,message,wParam,lParam);/执行默认的消息处理执行默认的消息处理1/14/20239 窗窗口口过过程程函函数数WndP
14、roc用用来来接接收收和和处处理理各各种种不不同同的的消消息息,而而主主函数函数WinMain通常要完成以下几步工作:通常要完成以下几步工作:(1)对对WNDCLASS类对象进行参数设置,实现窗口定义。类对象进行参数设置,实现窗口定义。(2)调用调用API函数函数RegisterClass注册应用程序的窗口类。注册应用程序的窗口类。(3)调调用用相相关关API函函数数创创建建和和显显示示窗窗口口,并并进进行行其其它它必必要要的的初初始始化化处处理理。其其中中,函函数数CreateWindow用用来来创创建建已已注注册册窗窗口口类类的的窗窗口口。Windows每每一一个个窗窗口口都都有有一一些些
15、基基本本属属性性,如如窗窗口口标标题题、窗窗口口位位置置和和大大小小、应应用用程程序序图图标标、鼠鼠标标指指针针、菜菜单单和和背背景景颜颜色色等等。窗窗口类就是充当这些属性的模板。口类就是充当这些属性的模板。(4)创创建建和和启启动动应应用用程程序序的的消消息息循循环环。Windows应应用用程程序序接接受受各各种种不不同同的的消消息息,包包括括键键盘盘消消息息、鼠鼠标标以以及及窗窗口口产产生生的的各各种种消消息息。Windows系系统统首首先先将将消消息息放放入入消消息息队队列列中中,应应用用程程序序的的消消息息循循环环就就是是从从应应用用程程序序的的消消息息队队列列中中检检取取消消息息,并
16、并将将消消息息发发送送相相应应的的窗窗口口过过程程函函数数中中作作进进一一步步处处理理。API函函数数GetMessage 和和DispatchMessage就是起到这样的作用。就是起到这样的作用。(5)如果接收到如果接收到WM_QUIT消息,则退出应用程序。消息,则退出应用程序。1/14/202310初始化应用程序初始化应用程序开始执行开始执行初始化并创建初始化并创建应用程序窗口应用程序窗口进入消息循环进入消息循环并获取一条消息并获取一条消息消息是否为消息是否为WM_QUIT?终止程序终止程序是是应用程序中是否应用程序中是否处理了此消息处理了此消息否否处理消息处理消息转送消息给窗口转送消息给
17、窗口进行默认处理进行默认处理是是否否 Windows应用程序的基本流程1/14/2023111.3 Windows编程特点编程特点一一个个完完整整的的Windows应应用用程程序序除除了了WinMain函函数数外外,还还包包含含用用于于处理用户动作和处理用户动作和窗窗口口消消息息的的窗窗口口函函数数。这这不不同同于于一一个个C+的的控控制制台台应应用用程程序序,可可以将整个程序包以将整个程序包含含在在main函函数数中中。事事实实上上,它它们们的的区区别别还还远远不不止止这这些些,不不久久还还会会发现一个发现一个Windows应用程序还常常具有这样的一些特性:应用程序还常常具有这样的一些特性:
18、消息驱动机制消息驱动机制图形设备接口图形设备接口(GDI)基于资源的程序设计基于资源的程序设计动态链接库动态链接库进程和线程进程和线程1/14/2023121.消息驱动机制消息驱动机制在在Windows操作环境中,无论是系统产生的动作或是用户运行应操作环境中,无论是系统产生的动作或是用户运行应用程序产生的动作,都称为事件用程序产生的动作,都称为事件(Events)产生的消息产生的消息(Message)。例如,在例如,在Windows 桌面桌面(传统风格传统风格)上,双击应用程序的快捷图标,上,双击应用程序的快捷图标,系统就会执行该应用程序。在系统就会执行该应用程序。在Windows的应用程序中
19、,也是通过的应用程序中,也是通过接收消息、分发消息、处理消息来和用户进行交互的。接收消息、分发消息、处理消息来和用户进行交互的。这种消息驱动的机制是这种消息驱动的机制是Windows编程的最大特点。需要注意的是,编程的最大特点。需要注意的是,许多许多Windows消息都经过了严格的定义,并且适用于所有的应用消息都经过了严格的定义,并且适用于所有的应用程序。例如,当用户按下鼠标的左键时系统就会发送程序。例如,当用户按下鼠标的左键时系统就会发送WM_LBUTTONDOWN消息,而当用户敲了一个字符键时系统消息,而当用户敲了一个字符键时系统就会发送就会发送WM_CHAR消息,若用户进行菜单选择或工具
20、按钮单击消息,若用户进行菜单选择或工具按钮单击等操作时,系统又会相应地发送等操作时,系统又会相应地发送WM_COMMAND消息给相应的消息给相应的窗口等等。窗口等等。1/14/2023132.图形设备接口图形设备接口(GDI)在传统的在传统的DOS环境中,想要在打印机上打印一幅图形是一件非常环境中,想要在打印机上打印一幅图形是一件非常复杂的事情,因为用户必须根据打印机类型和指令规则向打印机复杂的事情,因为用户必须根据打印机类型和指令规则向打印机输送数据。而输送数据。而Windows则提供了一个抽象的接口,称为图形设备则提供了一个抽象的接口,称为图形设备接口接口(Graphical Device
21、 Interface,简称,简称GDI),使得用户直接,使得用户直接利用系统的利用系统的GDI函数就能方便实现输入或输出,而不必关心与系函数就能方便实现输入或输出,而不必关心与系统相连的外部设备的类型。统相连的外部设备的类型。3.基于资源的程序设计基于资源的程序设计Windows应用程序常常包含众多图形元素,例如光标、菜单、工应用程序常常包含众多图形元素,例如光标、菜单、工具栏、位图、对话框等,在具栏、位图、对话框等,在Windows环境下,每一个这样的元素环境下,每一个这样的元素都作为一种可以装入应用程序的资源来存放。这些资源就像都作为一种可以装入应用程序的资源来存放。这些资源就像C+程序中
22、的常量一样,可以被编辑、修改,也可以被其他应用程序程序中的常量一样,可以被编辑、修改,也可以被其他应用程序所共享。所共享。Visual C+6.0中就提供这样的编辑器,可中就提供这样的编辑器,可“所见即所所见即所得得”地对这些不同类型的资源进行设计、编辑等。地对这些不同类型的资源进行设计、编辑等。1/14/2023144.动态链接库动态链接库动态链接库提供了一些特定结构的函数,能被应用程序在运行过程中动态链接库提供了一些特定结构的函数,能被应用程序在运行过程中装入和连接,且多个程序可以共享同一个动态链接库,这样就可以大装入和连接,且多个程序可以共享同一个动态链接库,这样就可以大大节省内存和磁盘
23、空间。从编程角度来说,动态链接库可以提高程序大节省内存和磁盘空间。从编程角度来说,动态链接库可以提高程序模块的灵活性,因为它本身是可以单独设计、编译和调试的。模块的灵活性,因为它本身是可以单独设计、编译和调试的。Windows提供了应用程序可利用的丰富的函数调用,大多数用于实现提供了应用程序可利用的丰富的函数调用,大多数用于实现其用户界面和在显示器上显示的文本和图形,都是通过动态链接库来其用户界面和在显示器上显示的文本和图形,都是通过动态链接库来实现的。这些动态链接库是一些具有实现的。这些动态链接库是一些具有.DLL扩展名或者有时是扩展名或者有时是.EXE扩展扩展名的文件。名的文件。在在Win
24、dows操作系统中,最主要的操作系统中,最主要的DLL有有KERNEL32.DLL、GDI32.DLL和和USER32.DLL三个模块。其中,三个模块。其中,KERNEL32用来处理用来处理存储器低层功能、任务和资源管理等存储器低层功能、任务和资源管理等Windows核心服务;核心服务;GDI32用来用来提供图形设备接口,管理用户界面和图形绘制,包括提供图形设备接口,管理用户界面和图形绘制,包括Windows元文件、元文件、位图、设备描述表和字体等;而位图、设备描述表和字体等;而USER32负责窗口的管理,包括消息、负责窗口的管理,包括消息、菜单、光标、计时器以及其它与控制窗口显示相关的一些功
25、能。菜单、光标、计时器以及其它与控制窗口显示相关的一些功能。1/14/2023155.进程和线程进程和线程在在32位位Windows多任务操作系统中,采用了进程和线程的管理模多任务操作系统中,采用了进程和线程的管理模式。进程是装入内存中正在执行的应用程序。进程包括私有的虚式。进程是装入内存中正在执行的应用程序。进程包括私有的虚拟地址空间、代码、数据及其它操作系统资源,如文件、管道以拟地址空间、代码、数据及其它操作系统资源,如文件、管道以及对该进程可见的同步对象等。进程包括了一个或多个在进程上及对该进程可见的同步对象等。进程包括了一个或多个在进程上下文内运行的线程。线程是操作系统分配下文内运行的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二部分 MFC编程MFC基本应用程序的建立 第二 部分 MFC 编程 基本 应用程序 建立

限制150内