第4章 MFC面向对象设计(精品).ppt
《第4章 MFC面向对象设计(精品).ppt》由会员分享,可在线阅读,更多相关《第4章 MFC面向对象设计(精品).ppt(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MFC面向对象设计面向对象设计计算机科学与技术学院计算机科学与技术学院 曲立平曲立平Email:Page 2 WIN32 API概述概述1 WIN32 API基本概念基本概念2 WIN32 API应应用用程程序序框框架架3 WIN32 API程序示例程序示例4 MFC应用程序框架应用程序框架5 MFC对对WIN32 API的封装的封装6 文档文档/视图视图7哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 5WIN32 API概述概述 应用程序应用程序 操作系统操作系统 输入输出设备输入输出设备 消息队列消息队列 系统调用系统调用Windows API哈尔滨工程大学
2、计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 6WIN32 API概述概述v在在Windows核心中有三个动态链接库构成了核心中有三个动态链接库构成了Win32 API的主体:的主体:USER32.DLL负责负责窗口窗口管理,包括消息、菜单、光标、通信、计管理,包括消息、菜单、光标、通信、计时器和其他控制显示窗口的函数。时器和其他控制显示窗口的函数。GDI32.DLL图形图形设置接口,负责管理用户界面的生成和图形绘设置接口,负责管理用户界面的生成和图形绘制,主要包括设置描述表、字体、位图等。制,主要包括设置描述表、字体、位图等。KERNEL32.DLLWindows的核心服务
3、,负责管理的核心服务,负责管理内存内存调度、调度、进度进度调度等底层功能。调度等底层功能。哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 7 WIN32 API概述概述1 WIN32 API基本概念基本概念2 WIN32 API应应用用程程序序框框架架3 WIN32 API程序示例程序示例4 MFC应用程序框架应用程序框架5 MFC对对WIN32 API的封装的封装6 文档文档/视图视图7哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 8WIN32 API基本概念基本概念1.句柄(句柄(HANDLE)vWindows系统中系统中对象或
4、实例对象或实例的标识。的标识。v这些对象包括这些对象包括模块模块、应用程序实例应用程序实例、窗口窗口、控制控制、位位图图、GDI对象对象、资源资源、文件文件等。等。vWindows程序并不是用物理地址来标识一个文件或动程序并不是用物理地址来标识一个文件或动态装入模块的,而是为这些态装入模块的,而是为这些对象分配确定的句柄对象分配确定的句柄,并,并将句柄将句柄返回给应用程序返回给应用程序,然后通过句柄来对对象进行,然后通过句柄来对对象进行操作。操作。哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 9WIN32 API基本概念基本概念句柄句柄类型类型含义含义句柄句柄类
5、型类型含义含义HANDLE对象句柄(通用)HPEN画笔句柄HWND窗口句柄HBRUSH画刷句柄HINSTANCE应用程序实例句柄HBITMAP位图句柄HDC设备环境句柄HICON图标句柄HCURSOR光标句柄HMENU菜单句柄HFONT字体句柄HFILE文件句柄哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 10WIN32 API基本概念基本概念2.常用数据类型常用数据类型数据类型数据类型含义含义数据类型数据类型含义含义BOOL布尔值,布尔值,TRUE或或FALSELPARAM32位整数位整数BYTE8位无符号整数位无符号整数LPCSTR32位指针,指向一个常数字
6、位指针,指向一个常数字符串符串COLORREF代表颜色的代表颜色的32位无符号整数位无符号整数LPSTR32位指针,指向一个字符串位指针,指向一个字符串DWORD32位无符号整位无符号整数数LPCTSTR32位指针,指向一个常数字位指针,指向一个常数字符串,可以移植到符串,可以移植到Unicode和和DBCS哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 11WIN32 API基本概念基本概念2.常用数据类型常用数据类型数据类型数据类型含义含义数据类型数据类型含义含义LONG32位整数位整数LPTSTR32位指针,指向一个字符串,位指针,指向一个字符串,可以移植到
7、可以移植到Unidcode和和DBCSLPVOID32位指针,指位指针,指向一个未指定类向一个未指定类型的数据型的数据WORD16位无符号整数位无符号整数UINT32位无符号整位无符号整数数WPARAM32位无符号整数位无符号整数WNDPROC32位指针,指位指针,指向一个窗口函数向一个窗口函数哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 12WIN32 API基本概念基本概念3.消息机制与事件驱动消息机制与事件驱动vWindows程序设计与程序设计与DOS最大的不同就在于最大的不同就在于事件驱动事件驱动。v应用程序的工作是应用程序的工作是产生消息产生消息、传递
8、消息传递消息和和处理消息处理消息。v程序的流程不是由事件的顺序来控制,而是由程序的流程不是由事件的顺序来控制,而是由事件的事件的触发触发来控制。来控制。v事件的发生是随机的、不确定的,并没有预定的顺序,事件的发生是随机的、不确定的,并没有预定的顺序,允许允许用户来安排用户来安排。vWindows是一种以是一种以消息为基础消息为基础的的事件驱动系统事件驱动系统,消息,消息是应用程序运行的动力源泉。是应用程序运行的动力源泉。哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 13WIN32 API基本概念基本概念v一个一个消息消息是系统定义的一个是系统定义的一个32位的值
9、位的值,它唯一地定义,它唯一地定义了了一个事件一个事件,向,向Windows发出一个通知,告诉应用程发出一个通知,告诉应用程序某个事件发生了。序某个事件发生了。vWindows应用程序的应用程序的运行运行是依靠是依靠外部发生的事件来驱外部发生的事件来驱动动的。的。v在在Windows应用程序中,应用程序中,窗口是处理消息的主角窗口是处理消息的主角。一。一个个Windows应用程序一定会有窗口和消息循环。窗口应用程序一定会有窗口和消息循环。窗口一旦创建,系统就会给线程一旦创建,系统就会给线程分配消息队列分配消息队列,用于消息,用于消息的派送。的派送。v消息分为消息分为队列消息队列消息和和非队列消
10、息非队列消息。哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 14WIN32 API基本概念基本概念v从消息的来源来看从消息的来源来看系统定义系统定义的消息的消息消息消息ID的范围:的范围:0-WM_USER-1(0X0400);用户定义用户定义的消息的消息消息消息ID的范围:的范围:WM_USER(0X0400)-0X7FFF;vWindows消息分为:消息分为:标准标准Windows消息消息命令命令消息消息控件控件通知消息通知消息操作系统是怎样操作系统是怎样将感知到的事件将感知到的事件传递给应用程序传递给应用程序的呢?的呢?哈尔滨工程大学计算机科学与技术学院哈
11、尔滨工程大学计算机科学与技术学院Page 15标准标准Windows消息消息v以以WM_为前缀(除为前缀(除WM_COMMAND外)。外)。宏名称宏名称对应消息对应消息消息处理函数消息处理函数ON_WM_CHARWM_CHAROnCharON_WM_CLOSEWM_CLOSEOnCloseON_WM_CREATEWM_CREATEOnCreateON_WM_DESTROYWM_DESTORYOnDestroyON_MOUSEMOVEWM_MOUSEMOVEOnMouseMoveON_WM_PAINTWM_PAINTOnPaint哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学
12、院Page 16命令消息和控件通知消息命令消息和控件通知消息v命令消息以命令消息以WM_COMMAND为消息名,在消息名中含为消息名,在消息名中含有有命令的标志符命令的标志符ID,以区分命令由何种对象产生。一般,以区分命令由何种对象产生。一般对应规则为对应规则为ON_COMMAND(,)ON_COMMAND(IDM_ABOUT,OnAbout)ON_COMMAND(IDM_FILENEW,OnFileNew)ON_COMMAND(IDM_FILEOPEN,OnFileOpen)ON_COMMAND(IDM_SAVE,OnSave)v控件通知消息是由控件通知消息是由编辑框编辑框、列表框列表框等子
13、窗口发送给父窗等子窗口发送给父窗口的通知消息。口的通知消息。以以WM_COMMAND形式出现。形式出现。哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 17v操作系统将每个事件都包装成一个称为消息的结构体操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,参看来传递给应用程序,参看MSDN。vMSG结构结构定义如下:定义如下:typedef struct tagMSG HWND hwnd;/接受该消息的接受该消息的窗口句柄窗口句柄 UINT message;/消息消息标识标识 WPARAM wParam;/32位消息的位消息的附加信息附加信息 L
14、PARAM lParam;/32位消息的位消息的附加信息附加信息 DWORD time;/消息消息创建创建时的时的时间时间 POINT pt;/消息创建时的消息创建时的鼠标鼠标/光标光标在屏幕中的在屏幕中的位置位置 MSG;v窗口负责接受并处理消息。窗口负责接受并处理消息。v每一个窗口都应该有相应的函数来处理消息,即所谓的窗每一个窗口都应该有相应的函数来处理消息,即所谓的窗口处理函数(口处理函数(Windows procedure),窗口函数根据消),窗口函数根据消息的类别决定其处理的方式。息的类别决定其处理的方式。哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page
15、18哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 19 WIN32 API概述概述1 WIN32 API基本概念基本概念2 WIN32 API应应用用程程序序框框架架3 WIN32 API程序示例程序示例4 MFC应用程序框架应用程序框架5 MFC对对WIN32 API的封装的封装6 文档文档/视图视图7哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 20WIN32 API应用程序框架应用程序框架1.应用程序入口应用程序入口v每一个每一个Windows应用程序都必须有一个应用程序都必须有一个WinMain函函数数作为程序的入口。作为
16、程序的入口。vWinMain函数函数声明声明如下:如下:int WMain(HINSTANCE hInstance;/当前应用程序当前实例句柄当前应用程序当前实例句柄HINSTANCE hPrevInstance;/前一个应用程序实例句柄前一个应用程序实例句柄LPSTR lpCmdLine;/指向当前应用程序命令行的指针指向当前应用程序命令行的指针int nCmdShow)/应用程序窗口的显示方式应用程序窗口的显示方式哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 21WIN32 API应用程序框架应用程序框架2.消息循环消息循环v每一个每一个Windows应用程
17、序都应有一个处理消息的循环。应用程序都应有一个处理消息的循环。MSG msg;while(GetMessage(&msg,NULL,0,0)TranslateMessage(&msg);/转换键盘消息转换键盘消息 DispatchMessage(&msg);/分派消息分派消息 哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 22WIN32 API应用程序框架应用程序框架WIN32 API应用程序的消息流动过程应用程序的消息流动过程哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 23WIN32 API应用程序框架应用程序框架3.窗口函数
18、窗口函数v作用:作用:处理消息处理消息。v利用利用switch/case判断消息的种类,以决定采用判断消息的种类,以决定采用自定自定义消息义消息的处理方式,或使用的处理方式,或使用DefWindowProc将消息将消息交给交给操作系统进行默认处理操作系统进行默认处理。v被定义为被定义为回调(回调(CALLBACK)函数)函数,当应用程序获得,当应用程序获得到消息后由操作系统所调用。到消息后由操作系统所调用。v窗口函数的窗口函数的名称可以是任意的名称可以是任意的,但其,但其函数形式必须一函数形式必须一致致。哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 24WIN3
19、2 API应用程序框架应用程序框架v窗口函数的函数形式:窗口函数的函数形式:LRESULT CALLBACK WndProc(HWND hwnd,/派送消息的窗口句柄派送消息的窗口句柄 UINT message,/消息标识消息标识 WPARAM wParam,/32位消息的附加信息位消息的附加信息 LPARAM lParam)/32位消息的附加信息位消息的附加信息v开发人员可以在开发人员可以在窗口函数内部添加消息处理代码窗口函数内部添加消息处理代码,以,以使应用程序能够响应消息并在消息处理代码中完成所使应用程序能够响应消息并在消息处理代码中完成所要求的任务。要求的任务。哈尔滨工程大学计算机科学
20、与技术学院哈尔滨工程大学计算机科学与技术学院Page 25WIN32 API应用程序框架应用程序框架4.窗口类窗口类v在创建应用程序窗口之前,必须在创建应用程序窗口之前,必须先注册窗口类先注册窗口类。v注册窗口类的方法是先注册窗口类的方法是先设置设置WNDCLASS结构结构的信息,的信息,然后用指向然后用指向WNDCLASS结构的结构的指针作为参数指针作为参数调用调用RegisterClass函数。函数声明如下:函数。函数声明如下:BOOL RegisterClass(WNDCLASS*wc)哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 26WNDCLASS结构
21、类型声明结构类型声明typedef struct tagWNDCLASS UINT style;/窗口类的样式,一般设置为窗口类的样式,一般设置为0 WNDPROC lpfnWndProc;/指向窗口函数的指针指向窗口函数的指针 int cbClsExtra;/分配在窗口类结构后的字节数分配在窗口类结构后的字节数 int cbWndExtra;/分配在窗口实例后的字节数分配在窗口实例后的字节数 HINSTANCE hInstance;/定义窗口类的应用程序的实例句柄定义窗口类的应用程序的实例句柄 HICON hIcon;/窗口类的图标句柄窗口类的图标句柄 HCURSOR hCursor;/窗口
22、类的光标窗口类的光标 HBRUSH hbrBackground;/窗口类的背景刷窗口类的背景刷 LPCSTR lpszMenuName;/窗口类的菜单名窗口类的菜单名 LPCSTR lpszClassName;/窗口类名窗口类名WNDCLASS;哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 27WIN32 API应用程序框架应用程序框架5.窗口的创建与显示窗口的创建与显示v使用使用CreateWindow函数可以创建窗口。函数可以创建窗口。v成功创建窗口后,该函数返回窗口的句柄。成功创建窗口后,该函数返回窗口的句柄。v使用使用CreateWindow函数创建窗口
23、后,窗口的显示函数创建窗口后,窗口的显示由由ShowWindow和和UpdateWindow两个函数实现。两个函数实现。哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 28CreateWindow函数函数HWND CreateWindowExW(LPCWSTR lpClassName,/窗口类名窗口类名LPCWSTR lpWindowName,/窗口实例的标题窗口实例的标题DWORD dwStyle,/窗口风格窗口风格int X,/窗口左上角坐标窗口左上角坐标xint Y,/窗口左上角坐标窗口左上角坐标yint nWidth,/窗口的宽度窗口的宽度int nHei
24、ght,/窗口的高度窗口的高度HWND hWndParent,/父窗口的句柄父窗口的句柄HMENU hMenu,/主菜单的句柄主菜单的句柄HINSTANCE hInstance,/应用程序实例句柄应用程序实例句柄LPVOID lpParam);/该值为该值为NULL哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 29vShowWindow函数声明:函数声明:BOOL ShowWindows(HWND hWnd,/窗口句柄窗口句柄int nCmdShow);/窗口显示方式窗口显示方式vUpdateWindow函数声明:函数声明:BOOL UpdateWindows(
25、HWND hWnd);/窗口句柄窗口句柄ShowWindow和和UpdateWindow哈尔滨工程大学计算机科学与技术学院哈尔滨工程大学计算机科学与技术学院Page 306.WIN32 API程序执行流程程序执行流程WIN32 API应用程序框架应用程序框架注册窗口类注册窗口类RegisterClass创建主窗口创建主窗口CreateWindow消息循环消息循环捕获消息捕获消息GetMessageTranslateMessageDispatchMessage处理消息处理消息窗口函数窗口函数程序出口点(程序出口点(WinMain返回)返回)程序入口点程序入口点Int WINAPI WinMain
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 MFC面向对象设计精品 MFC 面向 对象 设计 精品
限制150内