欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    (精品)C++面向对象程序设计教学PPT10.ppt

    • 资源ID:85525815       资源大小:1.41MB        全文页数:90页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    (精品)C++面向对象程序设计教学PPT10.ppt

    第第10章章 C+Windows程序设计基础程序设计基础 Windows系统是一个基于视窗的消息驱动系统,即使功能大系统是一个基于视窗的消息驱动系统,即使功能大异的异的Windows程序都有比较规范统一的程序界面,如窗口、程序都有比较规范统一的程序界面,如窗口、菜单、工具条、对话框等。菜单、工具条、对话框等。Windows程序的设计其实比较程序的设计其实比较规范,但若不了解规范,但若不了解Windows程序的基本结构,程序调度的基程序的基本结构,程序调度的基本方法(即消息驱动的基本原理),以及每个程序都会用到本方法(即消息驱动的基本原理),以及每个程序都会用到的基本数据结构,也很难编写出有用的的基本数据结构,也很难编写出有用的Windows程序来。程序来。之所以在本章介绍之所以在本章介绍API程序,就是基于上述考虑而设计的,程序,就是基于上述考虑而设计的,尽管尽管API程序设计在实际编程过程中已越来越少用了,但它程序设计在实际编程过程中已越来越少用了,但它却是理解却是理解Windows程序设计基本原理的最佳捷径,因为所有程序设计基本原理的最佳捷径,因为所有Windows程序的结构和执行过程最终大同于程序的结构和执行过程最终大同于API程序。在此程序。在此基础上学习基础上学习MFC及其它在及其它在Windows程序设计语言如程序设计语言如JAVA,都是大有帮助的!都是大有帮助的!“磨刀不误砍柴功!磨刀不误砍柴功!”,不是吗?,不是吗?10.1 Windows程序设计基础程序设计基础1.Windows系统的特点系统的特点标准的用户界面多任务设备独立性动态链接强大的内存管理10.1 Windows程序设计基础程序设计基础2.基本术语窗口(Window)由句柄唯一标识对话框(Dialog)人机交互图标(Icon)代表某一项操作或程序的图符位图(Bitmap)用位模式形成的图像菜单(Menu)命令工具栏(ToolBar)常用的菜单项状态栏(StateBar)操作状态或操作提示10.1.1 窗口窗口窗口是Windows程序的基本单元,Windows程序的运行过程就是窗口内部、窗口之间及窗口与用户之间的信息交换过程。窗口通常包括菜单、工具条、滚动条、状态栏、命令按钮、对话框等元素。10.1.2 事件驱动和消息响应事件驱动和消息响应1.事件事件事件是指人们应用计算机的过程中发生的操作,如按下键盘上的某个按键、移动鼠标、单击鼠标左键、移动窗口及选择程序菜单等操作都是事件。2、事件驱动、事件驱动每发生一个事件,就会产生一个与之对应的特定消息,该消息会被Windows系统捕获,然后将通过此消息调用执行与之对应的程序代码,实现相应的程序功能。因为从事件发生到相应程序代码被调用执行都是通过消息来实现的,因此事件驱动也常被称为消息驱动10.1.2 事件驱动和消息响应事件驱动和消息响应3、消息队列、消息队列用于存放消息的队列,消息系统由Windows系统自动建立和维护。Windows消息队列的类型消息队列的类型系统消息队列:由Windows系统维护管理的消息队列,每当有消息发生时,该消息将首先被存入系统消息队列。应用程序消息队列:应用程序消息队列:Windows系统会为每个应用系统会为每个应用程序建立一个独立的消息队列,用于存放该应用程序建立一个独立的消息队列,用于存放该应用程序的消息。程序的消息。10.1.2 事件驱动和消息响应事件驱动和消息响应4、消息循环、消息循环每个应用程序都有一个循环机构,该循环机构每个应用程序都有一个循环机构,该循环机构则不断地重复查看程序自身的消息队列,如则不断地重复查看程序自身的消息队列,如果队列中有消息,就将其取出并执行相应的果队列中有消息,就将其取出并执行相应的消息处理代码,这个处理消息的循环机构称消息处理代码,这个处理消息的循环机构称为消息循环。为消息循环。10.1.2 事件驱动和消息响应事件驱动和消息响应4、消息循环、消息循环每个应用程序都有一个循环机构,该循环机构每个应用程序都有一个循环机构,该循环机构则不断地重复查看程序自身的消息队列,如则不断地重复查看程序自身的消息队列,如果队列中有消息,就将其取出并执行相应的果队列中有消息,就将其取出并执行相应的消息处理代码,这个处理消息的循环机构称消息处理代码,这个处理消息的循环机构称为消息循环。为消息循环。10.1.2 事件驱动和消息响应事件驱动和消息响应5、Windows程序调度的基本原理程序调度的基本原理每个每个Windows程序启动后,就等待用户在其窗口中进程序启动后,就等待用户在其窗口中进行操作。每个操作会引发一个事件,就会产生一个行操作。每个操作会引发一个事件,就会产生一个与之对应的特定消息。该消息会被与之对应的特定消息。该消息会被Windows系统捕系统捕获。获。Windows系统对捕获的消息进行分析后,会将系统对捕获的消息进行分析后,会将消息传递给产生它的应用程序的消息队列,每个应消息传递给产生它的应用程序的消息队列,每个应用程序的消息循环机构不断地重复查看它自已的消用程序的消息循环机构不断地重复查看它自已的消息队列,如果队列中有消息,就将其取出并执行相息队列,如果队列中有消息,就将其取出并执行相应的消息处理代码,应的消息处理代码,如果队列中没有消息就等待,当队列中有消息时就又处理它,如此循环往复,直至程序结束。10.1.2 事件驱动和消息响应事件驱动和消息响应6、事件驱动及消息循环的基本原理10.1.2 事件驱动和消息响应事件驱动和消息响应8、DOS和Windows程序执行方式对比10.1.3Windows程序的构成1、Windows程序的组成程序的组成程序代码程序代码是程序的主体,用于实现程序的功能资源Windows程序具有标准规范的应用程序界面,每个Windows程序常常包含了许多相同的组成元素,如菜单、对话框、工具栏、应用程序图标、鼠标光标、程序版本信息等,这些组成元素被Windows从程序代码中独立出来,并以各种不同扩展名的文件形式存在,如.ico(图标)、.bmp(位图)、.cur(光标)等,Windows系统称之为资源资源则可以在需要时才通过相关命令资源则可以在需要时才通过相关命令加载加载到程序中。到程序中。.libC runtimeDll import.RC资源编译器资源编译器.DLGDialog Editor*.obj*.exe.res.DEF资源连接器资源连接器Image EditorFont Editor.BMP.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系统提供的API函数,编写能够在Windows系统中运行的程序。10.1.4 VC+的的Windows程序设计方法程序设计方法2MFC程序设计程序设计MFC是是Microsoft Foundation Classes的的缩缩写写,即即微微软软基基础础类类库库。MFC是是建建立立在在API基基础础上上的的C+类类库库,它它对对Windows提提供供的的API函函数数、数数据据结结构构、各各种种控控件件按按功功能能进进行行了了分分类类,利利用用面面向向对对象象技技术术将将它它们们封封装在不同的类中,并通过继承将这些类组织在一起。装在不同的类中,并通过继承将这些类组织在一起。MFC不不仅仅把把API函函数数封封装装成成了了易易于于使使用用的的类类,而而且且还还提提供供了了建建立立Windows应应用用程程序序的的框框架架结结构构,以以及及建建立立应应用用程程序序的的各各种种组组件件,简简化化了了Windows程程序序设设计的难度计的难度1.句柄句柄句柄是整个句柄是整个Windows编程的基础。一个句柄编程的基础。一个句柄是指是指Windows使用的一个唯一的整数值,是使用的一个唯一的整数值,是一个一个4字长(字长(32位无符号整数)位无符号整数)的数值,用的数值,用于标识应用程序中不同的对象和同类对象中于标识应用程序中不同的对象和同类对象中不同的实例。不同的实例。如标识一个窗口、按钮、图标、滚动条、输如标识一个窗口、按钮、图标、滚动条、输入入/输出设备、控件或文件等。输出设备、控件或文件等。应用程序通过句柄能够访问相应的对象信息。应用程序通过句柄能够访问相应的对象信息。10.2 Windows程序设计的常用数据结构程序设计的常用数据结构常用的句柄类型HWND 标识窗口句柄HINSTANCE标识当前实例句柄HCURSOR标识光标句柄HFONT标识字体句柄HPEN标识画笔句柄HBRUSH标识画刷句柄HDC标识设备环境句柄HBITMAP标识位图句柄HICON标识图标句柄HMENU标识菜单句柄HFILE标识文件句柄10.2 Windows程序设计的常用数据结构程序设计的常用数据结构关键字关键字类型类型等价于等价于BOOLBOOL逻辑类型逻辑类型intintBOOLEAN BOOLEAN 逻辑逻辑BYTEBYTEBYTEBYTE字节字节unsingedunsinged char charCHARCHAR字符字符charcharDOUBLE DOUBLE 双精度双精度doubledoubleDWORD DWORD 双字双字unsigned longunsigned longFLOATFLOAT浮点数浮点数floatfloatHANDLEHANDLE句柄句柄10.2.2 常用常用数据类型数据类型INTINT整数整数intintLONGLONG长整数长整数longlongSHORTSHORT短整数短整数shortshortUCHARUCHAR无符号字符无符号字符unsingedunsinged char charUINTUINT无符号整数无符号整数unsingedunsinged intintULONGULONG无符号长整数无符号长整数unsigned longunsigned longUSHORTUSHORT无符号短整数无符号短整数unsigendunsigend short shortVOIDVOIDvoidvoidWCHARWCHAR双字节码双字节码unsigned shortunsigned shortWCHAR_TWCHAR_T双字节码双字节码unsigned shortunsigned shortWORDWORD字字unsigned shortunsigned shortWPARAM消息参数消息参数UINTLPARAM消息参数消息参数LONGLRESULT消息返回值消息返回值 LONGHINSTANCE实例句柄实例句柄unsigned longHWAND窗口句柄窗口句柄unsigned longHDC设备环境句柄设备环境句柄unsigned longTCHAR字符字符charLPSTR字符指针字符指针char*LPCSTR常量字符指针常量字符指针const char*LPTSTR字符指针字符指针TCHAR*LPVOID无类型指针无类型指针void*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;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 structstruct _WNDCLASS _WNDCLASS UINT style;UINT style;/窗口类型窗口类型 WNDPROC WNDPROC lpfnWndProclpfnWndProc;/窗口函数指针窗口函数指针intint cbClsExtracbClsExtra;/;/为类结构的预留额外空间为类结构的预留额外空间intint cbWndExtracbWndExtra;/为窗口结构预留额外空间为窗口结构预留额外空间 HANDLE HANDLE hInstancehInstance;/窗口类的应用实例句柄窗口类的应用实例句柄HICON HICON hIconhIcon;/图标句柄图标句柄HCURSOR HCURSOR hCursorhCursor;/窗口类的光标窗口类的光标 HBRUSH HBRUSH hbrBackgroundhbrBackground;/窗口类的背景刷窗口类的背景刷LPCTSTR LPCTSTR lpszMenuNamelpszMenuName;/菜单资源名菜单资源名LPCTSTR LPCTSTR lpszClassNamelpszClassName;/窗口类名窗口类名 WNDCLASS;WNDCLASS;10.2.4 窗口结构窗口结构WNDCLASS中的style代表窗口类型,可取下面的值:WS_CHILD子窗口(不能与WS_POPUP同时使用)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、消息结构:、消息结构:MSGMSGtypedeftypedef structstruct tagMSGtagMSG HWNDHWND hwndhwnd;/消息发向的窗口句柄消息发向的窗口句柄UINTUINT message;message;/消息标识符消息标识符,WPARAM WPARAM wParamwParam;/16;/16位的消息参数,值因消息异位的消息参数,值因消息异LPARAM LPARAM lParamlParam;/32/32位的消息参数,值因消息异位的消息参数,值因消息异DWORDDWORD time;time;/消息放入消息队列的时间消息放入消息队列的时间POINTPOINT pt;pt;/消息放入消息队列的鼠标位置消息放入消息队列的鼠标位置。MSG;MSG;说明:说明:WPARAMWPARAM含义和数值因消息不同而不同含义和数值因消息不同而不同比如:键盘消息和鼠标消息所对应的比如:键盘消息和鼠标消息所对应的WPARAMWPARAM消息所代表的消息是不同消息所代表的消息是不同的。的。10.2.5 消息消息10.2.5 消息消息2、MSG中的域说明中的域说明hwnd是一个窗口句柄,用于标识消息发向的窗口。time用于保存消息放进消息队列的时间,pt用于保存将消息放入消息队列时的鼠标位置。message是消息标识符,它是一个32位的无符号整数。Windows中的每条消息都有一个对应的消息标识符,这些标识符是在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常用鼠标消息常用鼠标消息WM_LBUTTONDBLCLKWM_LBUTTONDOWNWM_LBUTTONUPWM_MBUTTONDBLCLKWM_MBUTTONDOWNWM_MBUTTONUPWM_RBUTTONDBLCLKWM_RBUTTONDOWNWM_RBUTTONUP10.2.5 消息消息6、Windows常用键盘消息常用键盘消息WM_KEYUPWM_KEYDOWN按下非系统键时产生此消息,系统键是指实现系统操作的组合键,如Alt和F1相结合的按钮键。附加参数wParam为按下键的虚拟键码,lParam记录按钮的重复次数、先前状态等。WM_KEYUP是释放按键时的键盘消息,其含义同WM_KEYDOWN。WM_CHAR按下非系统键时产生的消息,附加参数wParam为按键的ASCII码,lparam同前。7、其它常用、其它常用Windows常用消息常用消息WM_CREATECreateWindow函数发生的消息。WM_CLOSE关闭窗口时产生的消息,如有子窗口,也一起删除。WM_DESTROY关闭窗口时产生的消息WM_PAINThdc=(HDC)wParam;/发生用户区域移动或显示事件、用户窗口改变大小的事件、程序通过流动条滚动窗口,覆盖在窗口上面的其它对象(如菜单)移开时,都会产生此消息!10.2.5 消息消息8、消息的产生、消息的产生用户产生消息Windows本身产生消息应用程序本身产生消息其他应用程序产生消息9、消息的传递、消息的传递Windows系统有一个存放消息的队列,每个应用程序也有一个消息队列。Windows系统先将收到的消息存放在系统队列中;然后再分发到相应的应用程序队列中。应用程序则从自身的队列中获取消息并进行处理。10.2.5 消息消息10、消息的处理通常每个Windows应用程序至少对应一个窗口,每个窗口都要有一个窗口函数负责处理该窗口内所发生的事件。每个窗口至少有一个窗口函数,负责处理该窗口的所有消息。10.2.5 消息消息1、Windows标识符常用标识符常用 命名规则命名规则函数命名规则函数命名规则函数名函数名=动词动词+名词名词动词和名词的第一个字母必须大写动词和名词的第一个字母必须大写例例 GetMessage变量命名规则变量命名规则小写字母前缀表示变量的类型小写字母前缀表示变量的类型,其余其余 的部分描述变的部分描述变量的功能量的功能例例 nCount匈牙利命名法匈牙利命名法变量名以小写字母或代表数据类型的小写字母开头变量名以小写字母或代表数据类型的小写字母开头.Eg:szCmdLine 补充补充:Windows程序的名字程序的名字前缀前缀代表的数据类型代表的数据类型cchar or WCHAR or TCHARbyBYTE(unsigned char)nshortiintx,yint used as x-coordinate or y-coordinatecx,cyint used as x or y length;c stands for countb or fBOOL(int);f stands for flagwWORD(unsigned short)lLONG(long)dwDWORD(unsigned long)fnfunctionsstringszstring terminated by 0 characterhhandleppointer2、Windows程序常见名字前缀的含义程序常见名字前缀的含义10.3Windows程序的基本结构1、简单的、简单的Windows程序至少包含两个函数程序至少包含两个函数:WinMain():必有且仅有一个。是程序执行的入口点,类似于C程序中的main函数窗口函数窗口函数:每个窗口对应一个窗口函数,以响应该程序窗口中发生的事件消息。2、WinMain()函数需完成的功能函数需完成的功能定义窗口类注册窗口类建立窗口类的窗口显示窗口运行消息循环10.3Windows程序的基本结构3、Windows程序的执行逻辑程序的执行逻辑Windows系统首先为该程序建立必备的程序环境,如定义并初始化一些全局变量,接下来就寻找并进入WinMain函数。WinMain是Window程序的入口点,由它控制程序的执行流程。WinMain函数依次完成以下工作:调用API函数定义并注册窗口类,创建程序窗口,显示窗口,建立消息循环,等待用户操作程序窗口。用户在程序窗口中所作的每件事情都会产生一个消息,该消息会被Windows传递到该程序的消息队列中。WinMain中的消息循环会不断地从本程序的消息队列中获取消息,并将其传递给该窗口的窗口处理函数,由窗口处理函数对消息进行处理,实现相应的程序功能。10.3.2Win32Application程序设计在在Miscrosoft Visual C+中的中的API程序设计方法程序设计方法一般的编程方法是先用VC+的Win32Application向导建立一个Windows应用程序的框架,然后将它修改成自己的程序,并根据需要添加一些头文件、源程序文件及资源文件。【例10-1】在VC+6.0环境下设计一个简单的WindowsAPI程序,该程序在窗口中显示字符串Hellow,APIProgramming!。10.3.2Win32Application程序设计编程过程如下:(1)启动VC+6.0,选择菜单“文件|新建”,在弹出的“新建”对话框中选择“工程”标签页,如图所示。10.3.2Win32Application程序设计(2)选中“工程”对话框中的“Win32Application”列表项,并在“位置”编辑框中指定本项目建立的磁盘目录,然后在“工程”编辑框中输入项目文件的名字。(3)单击“确定”按钮,并在弹出的对话框中选中“Anemptyproject.”单选项,然后单击“完成”按钮。最后将得到如图10-7(a)所示的空项目文件窗口。(4)选择菜单“文件|新建”,然后在弹出的对话框中选择“文件”标签,并选择列表中的“C+SourceFile”项目,然后在“文件”编辑框中输入源程序文件名“HellApi”,如图10-7(b)所示。输入完成后,单击“结束”按钮。10.3.2Win32Application程序设计10.3.2Win32Application程序设计(5)打开目录C:dkHellApi,在该目录中可以看到以下文件名:HellApi.cpp、HellApi.dsp、HellApi.dsw、HellApi.ncb、HellApi.opt,这些文件就是在前面的操作过程产生的。(6)在HellApi.cpp中输入下面的程序代码。HellApi.cpp#includeLRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,int iCmdShow)staticTCHARszAppName=TEXT(HelloWin);HWNDhwnd;MSGmsg;WNDCLASS wndclass;wndclass.style=CS_HREDRAW|CS_VREDRAW;wndclass.lpfnWndProc=WndProc;wndclass.cbClsExtra=0;wndclass.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=szAppName;if(!RegisterClass(&wndclass)MessageBox(NULL,TEXT(This program requires Windows NT!),szAppName,MB_ICONERROR);return 0;注册窗口类注册窗口类定义定义窗口窗口的属的属性,性,如大如大小、小、宽度,宽度,前景前景色等色等 hwnd=CreateWindow(szAppName,/用于建立窗口的类名用于建立窗口的类名 TEXT(The Hello Program),/窗口标题窗口标题 WS_OVERLAPPEDWINDOW,/窗口类型窗口类型 CW_USEDEFAULT,/窗口左上角窗口左上角X坐标为默认值坐标为默认值 CW_USEDEFAULT,/窗口左上角窗口左上角Y坐标为默认值坐标为默认值 CW_USEDEFAULT,/窗口宽度为默认值窗口宽度为默认值 CW_USEDEFAULT,/窗口高度为默认值窗口高度为默认值 NULL,/该窗口没有父窗口该窗口没有父窗口 NULL,/该窗口没有菜单该窗口没有菜单 hInstance,/创建本窗口的程序句柄创建本窗口的程序句柄 NULL);/系统保留参数系统保留参数 ShowWindow(hwnd,iCmdShow);/显示窗口,显示窗口,hwnd代表上面建立的窗口代表上面建立的窗口 UpdateWindow(hwnd);/更新窗口,绘制窗口客户区更新窗口,绘制窗口客户区本段程序建立并显示一个窗口本段程序建立并显示一个窗口while(GetMessage(&msg,NULL,0,0)TranslateMessage(&msg);DispatchMessage(&msg);returnmsg.wParam;Windows程序程序的消息循环的消息循环LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)HDChdc;PAINTSTRUCTps;RECTrect;窗口处理函数,是窗口处理函数,是一个回调函数,每一个回调函数,每个应用程序至少有个应用程序至少有一个窗口处理函数,一个窗口处理函数,窗口函数的参数由窗口函数的参数由Windows传递,这传递,这些参数是由事件消些参数是由事件消息产生的息产生的。switch(message)/消息处理case WM_CREATE:return0;case WM_PAINT:hdc=BeginPaint(hwnd,&ps);GetClientRect(hwnd,&rect);DrawText(hdc,Hello,WindowsAPI,-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);EndPaint(hwnd,&ps);return0;case WM_DESTROY:PostQuitMessage(0);return0;returnDefWindowProc(hwnd,message,wParam,lParam);10.3.3Windows程序的控制流程所有所有Windows应用程序具有相同的程序结构和应用程序具有相同的程序结构和执行控制流程,步骤如下:执行控制流程,步骤如下:(1)创建全局变量(2)程序入口函数WinMain()函数接收控制(3)WinMain()登记窗口(4)WinMain()建立窗口(5)WinMain()进入消息循环(6)当窗口中有事件发生时,事件消息进入消息循环队列(7)windows操作系统分析消息,调用该窗口的窗口函数进行处理。(8)WinMain函数退出,程序终止。如下图所示如下图所示WindowsAPI程序的控制程创建全局变量程序入口函数WinMain()函数接收控制WinMain()登记窗口WinMain()建立窗口WinMain()进入消息循环当窗口中有事件发生时,事件消息进入消息循环队列windows操作系统分析消息,调用该窗口的窗口函数进行处理。WinMain函数退出,程序终止。WinMain()登记窗口建立窗口消息循环Hello,WindowsAPI显示窗口程序出口:程序出口:WM_QUITWindows程序的控制流程程序的控制流程int WINAPI WinMain(hIns,hPrevI,.)MSG msg;RegisterClass(&wndclass)CreateWindow(.);ShowWindow(hwnd,iCmdShow);UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)TranslateMessage(&msg);DispatchMessage(&msg);return msg.wParam;LRESULT CALLBACK WndProc(hwnd,message,wParam,lParam)switch(message)case WM_CREATE:case WM_COMMAND:case WM_LBUTTONDOWN:case WM_PAINT:case WM_CLOSE:case WM_DESTROY:return DefWindowProc(hwnd,message,wParam,lParam);Mouse DriverKeyboard DriversystemmessagequeueapplicationmessagequeueMessage from others windows postMessage()WindowsUsermoduteHELLWin.exe10.3.3Windows程序的控制流程接下来将对API程序的建立、执行流程进行进一步的剖析。借此理解Windows程序的结构,事件驱动和消息循环的本质。DOS平台的C程序的入口点是main()函数,在WINDOW的C+程序的入口点是WinMain()函数。其定义形式为:intAPIENTRYWinMain(HINSTANCEhInstance,/HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)实例句柄,当程序在实例句柄,当程序在WINDOWS下下运行时,它唯一地标识该程序运行时,它唯一地标识该程序当程序在当程序在WINDOWS下有多个副本运下有多个副本运行时,它标识该程序的前一个副本行时,它标识该程序的前一个副本标识传给该程序的命令行参数,近似于标识传给该程序的命令行参数,近似于main()函数的函数的char*argv 指针窗口在指针窗口在Window中的显示方式,其值中的显示方式,其值为为1-7,如:值,如:值1表示表示SW_SHOWNORMAL/窗口以常规显示窗口以常规显示见第见第321页表页表10-41、程序入口点入口点窗口总是在窗口类的基础上创建的,窗口类标识了处理窗口消息的窗口过程,这是非常重要的。记住:窗口总是在窗口类的基础上创建的,窗口类用于标处理窗口消息的窗口过程。在创建窗口之前,必须先调用RegisterClass函数登录一个窗口类,以后可以基于这个已登录的窗口创建多个窗口。只有程序的第一个实例需要登录窗口类!例例10-1的登录窗口如下:2、注册窗口类窗口类WNDCLASS WNDCLASS wndclasswndclass;wndclass.stylewndclass.style =CS_HREDRAW|CS_VREDRAW;CS_HREDRAW|CS_VREDRAW;wndclass.lpfnWndProcwndclass.lpfnWndProc =WndProcWndProc ;wndclass.cbClsExtrawndclass.cbClsExtra =0;0;wndclass.cbWndExtrawndclass.cbWndExtra =0;0;wndclass.hInstancewndclass.hInstance =hInstancehInstance;wndclass.hIconwndclass.hIcon =LoadIconLoadIcon(NULL,IDI_APPLICATION);(NULL,IDI_APPLICATION);wndclass.hCursorwndclass.hCursor =LoadCursorLoadCursor(NULL,IDC_ARROW);(NULL,IDC_ARROW);wndclass.hbrBackgroundwndclass.hbrBackground=(HBRUSH)(HBRUSH)GetStockObjectGetStockObject(WHITE_BRUSH);(WHITE_BRUSH);wndclass.lpszMenuNamewndclass.lpszMenuName=NULL;NULL;wndclass.lpszClassNamewndclass.lpszClassName=szAppNameszAppName;if(!if(!RegisterClassRegisterClass(&(&wndclasswndclass)MessageBoxMessageBox(NULL,“This program !,NULL,“This program !,szAppNameszAppName,MB_ICONERROR);,MB_ICONERROR);return 0;return 0;发生在本窗口中发生在本窗口中的事件由的事件由WndProc处理,处理,这是这是WinMain与与窗口函数的窗口函数的关联!关联!3、创建、创建窗口窗口hwndhwnd=CreateWindowCreateWindow(szAppNameszAppName,/window class name/window class name TEXT(The Hello Program),TEXT(The Hello Program),/window caption/window caption WS_OVERLAPPEDWINDOW,WS_OVERLAPPEDWINDOW,/window style/window style CW_USEDEFAULT,CW_USEDEFAULT,/initial x position/initial x position CW_USEDEFAULT,CW_USEDEFAULT,/initial y position/initial y position CW_USEDEFAULT,CW_USEDEFAULT,/initial x size/initial x size CW_USEDEFAULT,CW_USEDEFAULT,/initia

    注意事项

    本文((精品)C++面向对象程序设计教学PPT10.ppt)为本站会员(hwp****526)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开