(精品)C++面向对象程序设计教学PPT10.ppt
《(精品)C++面向对象程序设计教学PPT10.ppt》由会员分享,可在线阅读,更多相关《(精品)C++面向对象程序设计教学PPT10.ppt(90页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第10章章 C+Windows程序设计基础程序设计基础 Windows系统是一个基于视窗的消息驱动系统,即使功能大系统是一个基于视窗的消息驱动系统,即使功能大异的异的Windows程序都有比较规范统一的程序界面,如窗口、程序都有比较规范统一的程序界面,如窗口、菜单、工具条、对话框等。菜单、工具条、对话框等。Windows程序的设计其实比较程序的设计其实比较规范,但若不了解规范,但若不了解Windows程序的基本结构,程序调度的基程序的基本结构,程序调度的基本方法(即消息驱动的基本原理),以及每个程序都会用到本方法(即消息驱动的基本原理),以及每个程序都会用到的基本数据结构,也很难编写出有用的
2、的基本数据结构,也很难编写出有用的Windows程序来。程序来。之所以在本章介绍之所以在本章介绍API程序,就是基于上述考虑而设计的,程序,就是基于上述考虑而设计的,尽管尽管API程序设计在实际编程过程中已越来越少用了,但它程序设计在实际编程过程中已越来越少用了,但它却是理解却是理解Windows程序设计基本原理的最佳捷径,因为所有程序设计基本原理的最佳捷径,因为所有Windows程序的结构和执行过程最终大同于程序的结构和执行过程最终大同于API程序。在此程序。在此基础上学习基础上学习MFC及其它在及其它在Windows程序设计语言如程序设计语言如JAVA,都是大有帮助的!都是大有帮助的!“磨
3、刀不误砍柴功!磨刀不误砍柴功!”,不是吗?,不是吗?10.1 Windows程序设计基础程序设计基础1.Windows系统的特点系统的特点标准的用户界面多任务设备独立性动态链接强大的内存管理10.1 Windows程序设计基础程序设计基础2.基本术语窗口(Window)由句柄唯一标识对话框(Dialog)人机交互图标(Icon)代表某一项操作或程序的图符位图(Bitmap)用位模式形成的图像菜单(Menu)命令工具栏(ToolBar)常用的菜单项状态栏(StateBar)操作状态或操作提示10.1.1 窗口窗口窗口是Windows程序的基本单元,Windows程序的运行过程就是窗口内部、窗口之
4、间及窗口与用户之间的信息交换过程。窗口通常包括菜单、工具条、滚动条、状态栏、命令按钮、对话框等元素。10.1.2 事件驱动和消息响应事件驱动和消息响应1.事件事件事件是指人们应用计算机的过程中发生的操作,如按下键盘上的某个按键、移动鼠标、单击鼠标左键、移动窗口及选择程序菜单等操作都是事件。2、事件驱动、事件驱动每发生一个事件,就会产生一个与之对应的特定消息,该消息会被Windows系统捕获,然后将通过此消息调用执行与之对应的程序代码,实现相应的程序功能。因为从事件发生到相应程序代码被调用执行都是通过消息来实现的,因此事件驱动也常被称为消息驱动10.1.2 事件驱动和消息响应事件驱动和消息响应3
5、、消息队列、消息队列用于存放消息的队列,消息系统由Windows系统自动建立和维护。Windows消息队列的类型消息队列的类型系统消息队列:由Windows系统维护管理的消息队列,每当有消息发生时,该消息将首先被存入系统消息队列。应用程序消息队列:应用程序消息队列:Windows系统会为每个应用系统会为每个应用程序建立一个独立的消息队列,用于存放该应用程序建立一个独立的消息队列,用于存放该应用程序的消息。程序的消息。10.1.2 事件驱动和消息响应事件驱动和消息响应4、消息循环、消息循环每个应用程序都有一个循环机构,该循环机构每个应用程序都有一个循环机构,该循环机构则不断地重复查看程序自身的消
6、息队列,如则不断地重复查看程序自身的消息队列,如果队列中有消息,就将其取出并执行相应的果队列中有消息,就将其取出并执行相应的消息处理代码,这个处理消息的循环机构称消息处理代码,这个处理消息的循环机构称为消息循环。为消息循环。10.1.2 事件驱动和消息响应事件驱动和消息响应4、消息循环、消息循环每个应用程序都有一个循环机构,该循环机构每个应用程序都有一个循环机构,该循环机构则不断地重复查看程序自身的消息队列,如则不断地重复查看程序自身的消息队列,如果队列中有消息,就将其取出并执行相应的果队列中有消息,就将其取出并执行相应的消息处理代码,这个处理消息的循环机构称消息处理代码,这个处理消息的循环机
7、构称为消息循环。为消息循环。10.1.2 事件驱动和消息响应事件驱动和消息响应5、Windows程序调度的基本原理程序调度的基本原理每个每个Windows程序启动后,就等待用户在其窗口中进程序启动后,就等待用户在其窗口中进行操作。每个操作会引发一个事件,就会产生一个行操作。每个操作会引发一个事件,就会产生一个与之对应的特定消息。该消息会被与之对应的特定消息。该消息会被Windows系统捕系统捕获。获。Windows系统对捕获的消息进行分析后,会将系统对捕获的消息进行分析后,会将消息传递给产生它的应用程序的消息队列,每个应消息传递给产生它的应用程序的消息队列,每个应用程序的消息循环机构不断地重复
8、查看它自已的消用程序的消息循环机构不断地重复查看它自已的消息队列,如果队列中有消息,就将其取出并执行相息队列,如果队列中有消息,就将其取出并执行相应的消息处理代码,应的消息处理代码,如果队列中没有消息就等待,当队列中有消息时就又处理它,如此循环往复,直至程序结束。10.1.2 事件驱动和消息响应事件驱动和消息响应6、事件驱动及消息循环的基本原理10.1.2 事件驱动和消息响应事件驱动和消息响应8、DOS和Windows程序执行方式对比10.1.3Windows程序的构成1、Windows程序的组成程序的组成程序代码程序代码是程序的主体,用于实现程序的功能资源Windows程序具有标准规范的应用
9、程序界面,每个Windows程序常常包含了许多相同的组成元素,如菜单、对话框、工具栏、应用程序图标、鼠标光标、程序版本信息等,这些组成元素被Windows从程序代码中独立出来,并以各种不同扩展名的文件形式存在,如.ico(图标)、.bmp(位图)、.cur(光标)等,Windows系统称之为资源资源则可以在需要时才通过相关命令资源则可以在需要时才通过相关命令加载加载到程序中。到程序中。.libC runtimeDll import.RC资源编译器资源编译器.DLGDialog Editor*.obj*.exe.res.DEF资源连接器资源连接器Image EditorFont Editor.B
10、MP.ICO.CUR.FON.h.c/cppc编译器编译器2、Window程序的编译链接过程10.1.4 VC+的的Windows程序设计方法程序设计方法1API程序设计程序设计API即ApplicationProgrammingInterface(应用程序编程接口),它是Windows操作系统和Windows应用程序之间的标准接口,在应用程序中可以通过API访问Windows提供的各种函数、宏及数据结构。API函数保存在一些动态链接库中,每个Windows程序都要用到的动态链接库有USER32.Dll、GDI32.Dll、KERNEL32.Dll。API程序设计就是直接利用Windows系统
11、提供的API函数,编写能够在Windows系统中运行的程序。10.1.4 VC+的的Windows程序设计方法程序设计方法2MFC程序设计程序设计MFC是是Microsoft Foundation Classes的的缩缩写写,即即微微软软基基础础类类库库。MFC是是建建立立在在API基基础础上上的的C+类类库库,它它对对Windows提提供供的的API函函数数、数数据据结结构构、各各种种控控件件按按功功能能进进行行了了分分类类,利利用用面面向向对对象象技技术术将将它它们们封封装在不同的类中,并通过继承将这些类组织在一起。装在不同的类中,并通过继承将这些类组织在一起。MFC不不仅仅把把API函函
12、数数封封装装成成了了易易于于使使用用的的类类,而而且且还还提提供供了了建建立立Windows应应用用程程序序的的框框架架结结构构,以以及及建建立立应应用用程程序序的的各各种种组组件件,简简化化了了Windows程程序序设设计的难度计的难度1.句柄句柄句柄是整个句柄是整个Windows编程的基础。一个句柄编程的基础。一个句柄是指是指Windows使用的一个唯一的整数值,是使用的一个唯一的整数值,是一个一个4字长(字长(32位无符号整数)位无符号整数)的数值,用的数值,用于标识应用程序中不同的对象和同类对象中于标识应用程序中不同的对象和同类对象中不同的实例。不同的实例。如标识一个窗口、按钮、图标、
13、滚动条、输如标识一个窗口、按钮、图标、滚动条、输入入/输出设备、控件或文件等。输出设备、控件或文件等。应用程序通过句柄能够访问相应的对象信息。应用程序通过句柄能够访问相应的对象信息。10.2 Windows程序设计的常用数据结构程序设计的常用数据结构常用的句柄类型HWND 标识窗口句柄HINSTANCE标识当前实例句柄HCURSOR标识光标句柄HFONT标识字体句柄HPEN标识画笔句柄HBRUSH标识画刷句柄HDC标识设备环境句柄HBITMAP标识位图句柄HICON标识图标句柄HMENU标识菜单句柄HFILE标识文件句柄10.2 Windows程序设计的常用数据结构程序设计的常用数据结构关键字
14、关键字类型类型等价于等价于BOOLBOOL逻辑类型逻辑类型intintBOOLEAN BOOLEAN 逻辑逻辑BYTEBYTEBYTEBYTE字节字节unsingedunsinged char charCHARCHAR字符字符charcharDOUBLE DOUBLE 双精度双精度doubledoubleDWORD DWORD 双字双字unsigned longunsigned longFLOATFLOAT浮点数浮点数floatfloatHANDLEHANDLE句柄句柄10.2.2 常用常用数据类型数据类型INTINT整数整数intintLONGLONG长整数长整数longlongSHORTS
15、HORT短整数短整数shortshortUCHARUCHAR无符号字符无符号字符unsingedunsinged char charUINTUINT无符号整数无符号整数unsingedunsinged intintULONGULONG无符号长整数无符号长整数unsigned longunsigned longUSHORTUSHORT无符号短整数无符号短整数unsigendunsigend short shortVOIDVOIDvoidvoidWCHARWCHAR双字节码双字节码unsigned shortunsigned shortWCHAR_TWCHAR_T双字节码双字节码unsigned
16、shortunsigned shortWORDWORD字字unsigned shortunsigned shortWPARAM消息参数消息参数UINTLPARAM消息参数消息参数LONGLRESULT消息返回值消息返回值 LONGHINSTANCE实例句柄实例句柄unsigned longHWAND窗口句柄窗口句柄unsigned longHDC设备环境句柄设备环境句柄unsigned longTCHAR字符字符charLPSTR字符指针字符指针char*LPCSTR常量字符指针常量字符指针const char*LPTSTR字符指针字符指针TCHAR*LPVOID无类型指针无类型指针void*
17、LPCVOID无类型长指针无类型长指针const void*(1)、坐标结构typedef struct tagPOINT LONG x;LONG y;POINT;在在MFCMFC中还有一个类中还有一个类CpointCpoint,与,与POINTPOINT结构近似,但它有许多成员函数。结构近似,但它有许多成员函数。(2)、长、宽尺寸结构:CSIZE,Csize;typedef struct tagSIZE int cx;int cy;SIZE;10.2.3点和矩形区域(3)、记录矩形区域结构RECT和Crecttypedef struct tagRECT LONG left;LONG top;
18、LONG right;LONG bottom;RECT;在在MFCMFC中中CrectCrect 与此类似,但有成员函数。与此类似,但有成员函数。LPRECT LPRECT 为指针为指针RECTRECT类型的常数指针。类型的常数指针。(4)、颜色COLORREF 32-bit value used to specify an RGB color.例:COLORREF RGB(BYTE COLORREF RGB(BYTE bRed,BYTEbRed,BYTE bGreen,BYTEbGreen,BYTE BblueBblue););10.2.4 窗口结构窗口结构typedeftypedef st
19、ructstruct _WNDCLASS _WNDCLASS UINT style;UINT style;/窗口类型窗口类型 WNDPROC WNDPROC lpfnWndProclpfnWndProc;/窗口函数指针窗口函数指针intint cbClsExtracbClsExtra;/;/为类结构的预留额外空间为类结构的预留额外空间intint cbWndExtracbWndExtra;/为窗口结构预留额外空间为窗口结构预留额外空间 HANDLE HANDLE hInstancehInstance;/窗口类的应用实例句柄窗口类的应用实例句柄HICON HICON hIconhIcon;/图标
20、句柄图标句柄HCURSOR HCURSOR hCursorhCursor;/窗口类的光标窗口类的光标 HBRUSH HBRUSH hbrBackgroundhbrBackground;/窗口类的背景刷窗口类的背景刷LPCTSTR LPCTSTR lpszMenuNamelpszMenuName;/菜单资源名菜单资源名LPCTSTR LPCTSTR lpszClassNamelpszClassName;/窗口类名窗口类名 WNDCLASS;WNDCLASS;10.2.4 窗口结构窗口结构WNDCLASS中的style代表窗口类型,可取下面的值:WS_CHILD子窗口(不能与WS_POPUP同时使
21、用)WS_BORDER带边框的窗口WS_CAPTION带标题栏的窗口WS_HSCROLL带有水平滚动条的窗口WS_MAXIMIZE最大尺寸的窗口WS_MAXIMIZEBOX带最大化框的窗口WS_MINIMIZE最小尺寸的窗口WS_MINIMIZEBOX带最小化框的窗口WS_OVERLAPPED带边框和标题栏的窗口WS_OVERLAPPEDWINDOW带边框、标题栏、系统菜单及最大、最小化框的窗口WS_POPUP弹出式窗口WS_POPUPWINDOW带边框和系统菜单的弹出式窗口WS_SYSMENU带系统菜单的窗口WS_VSCROLL带垂直滚动条的窗口1 1、消息结构:、消息结构:MSGMSGty
22、pedeftypedef structstruct tagMSGtagMSG HWNDHWND hwndhwnd;/消息发向的窗口句柄消息发向的窗口句柄UINTUINT message;message;/消息标识符消息标识符,WPARAM WPARAM wParamwParam;/16;/16位的消息参数,值因消息异位的消息参数,值因消息异LPARAM LPARAM lParamlParam;/32/32位的消息参数,值因消息异位的消息参数,值因消息异DWORDDWORD time;time;/消息放入消息队列的时间消息放入消息队列的时间POINTPOINT pt;pt;/消息放入消息队列的鼠
23、标位置消息放入消息队列的鼠标位置。MSG;MSG;说明:说明:WPARAMWPARAM含义和数值因消息不同而不同含义和数值因消息不同而不同比如:键盘消息和鼠标消息所对应的比如:键盘消息和鼠标消息所对应的WPARAMWPARAM消息所代表的消息是不同消息所代表的消息是不同的。的。10.2.5 消息消息10.2.5 消息消息2、MSG中的域说明中的域说明hwnd是一个窗口句柄,用于标识消息发向的窗口。time用于保存消息放进消息队列的时间,pt用于保存将消息放入消息队列时的鼠标位置。message是消息标识符,它是一个32位的无符号整数。Windows中的每条消息都有一个对应的消息标识符,这些标识
24、符是在windows.h中定义的3、消息的种类、消息的种类标准Windows消息除除WM_COMMAND外,所有以外,所有以WM_ 为前缀的为前缀的消息,由窗口和视图处理。消息,由窗口和视图处理。控制消息由控件和子窗口发给父窗口的消息。由控件和子窗口发给父窗口的消息。命令消息来自用户接口对象。如:菜单、工具条和加速键来自用户接口对象。如:菜单、工具条和加速键等。等。10.2.5 消息消息10.2.5 消息消息4、常见消息前缀的含义、常见消息前缀的含义BM表示按钮控制消息CB组合框控制消息EM编辑框控制消息LB列表控制消息SBM滚动条控制消息WM窗口消息10.2.5 消息消息5、Windows常
25、用鼠标消息常用鼠标消息WM_LBUTTONDBLCLKWM_LBUTTONDOWNWM_LBUTTONUPWM_MBUTTONDBLCLKWM_MBUTTONDOWNWM_MBUTTONUPWM_RBUTTONDBLCLKWM_RBUTTONDOWNWM_RBUTTONUP10.2.5 消息消息6、Windows常用键盘消息常用键盘消息WM_KEYUPWM_KEYDOWN按下非系统键时产生此消息,系统键是指实现系统操作的组合键,如Alt和F1相结合的按钮键。附加参数wParam为按下键的虚拟键码,lParam记录按钮的重复次数、先前状态等。WM_KEYUP是释放按键时的键盘消息,其含义同WM_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 C+ 面向 对象 程序设计 教学 PPT10
限制150内