




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章Windows应用程序,主要内容Windows编程基础知识Windows应用程序的基本结构作业:3-2,3-5,上机创建一个Windows应用程序基本结构(窗口),Windows编程的几个常用名词用VC编写windows程序有两种方式windowsc方式,SDK编程,直接调用Windows的API进行编程C+方式,对SDK函数进行包装,如VC中的MFC、BCB中的VCL。学VC最好是先学用SDK编写程序,在掌握Windows操作系统的工作原理和各API函数的应用,然后再深入MFC。WindowsSKD与APIWindowsSDK(WindowsSoftwareDevelopmentKit,Windows软件开发工具包),包括windows函数和常数定义、API函数说明文档、相关工具和示例。WIN32SDK是基于WIN32API编程的工具,在安装VisualC+时WIN32SDK同时被安装上。API(ApplicationProgrammingInterface,应用编程接口),是操作系统留给应用程序的一个调用接口,应用程序通过调用API使操作系统去执行应用程序的命令。API由上千个API函数组成(win95中有两千多个)。MFC是API的封装,结合面向对象的继承、多态组成的类,共有一百多个类组成。SDK与API关系密切,使用API编程也称“SDK编程”。API和SDK是开发Windows应用程序(包括其它编程框架和类库MFC)的基础,MFC虽然比SDK编程有更高的抽象度,但在需要时可直接调用API函数。,SDK的主要组成部分在线帮助,描述Windows编程用到的函数、消息、结构、宏及其他资源。各种编程工具,如对话框编辑器及图像编辑器等。Windows库及头文件。C语言编译系统,使用C语言编写Windows应用程序。变量、函数的匈牙利命名规indows中变量、函数的命名规则,Mcrosoft采用匈牙利命名法。匈牙利命名法是由Mcrosoft的著名开发人员,Excel的主要设计者查尔斯西蒙尼(国籍是匈牙利)在他的博士论文中提出来的。匈牙利命名法的规则:变量、函数的名字以一个或者多个小写字母开头,用这些字母来指定数据类型。(见下页)名字前缀后是一个或多个第一个字母大写的单词,单词指出了对象的用途。例:m_szStudentName表示一个学生名字的类成员变量,数据类型是字符串型。,标准前缀的数据类型前缀类型bBOOL/(integer)布尔型byBYTE/(unsignedcharacter)字符型或无符号字符型c(ctaracter)字符型,短整型dwDWORD/(unsignedlong)双字,或无符号长整型fn(function)函数hHANDLE(unsignedlong)句柄i(integer)整型lLONG/(long)长整型lPLONG/(far)pointer长整型,远指针nshortinteger短整型npshort/(near)pointer短整型,近指针ppointer指针sstring,字符串zASCII字符串(以NULL或0结尾)wWORD(unsigned)无符号整型xshort短整型,用作X坐标yshort短整型,用作Y坐标m_类成员变量sz以0结尾的字符串,31Windows编程基础知识1.Windows编程的特点()用户界面的一致性用户界面使用Windows内部例程构造菜单和对话框,每一个窗口都包含了相同的基本特性(窗口结构类似),这些基本特性在应用程序中是一致的,因而用户能很容易地适应新的应用程序。()用基于图形的图标来代表应用程序和数据采用图形图像来代表文件、应用程序、窗口和目录等物理数据结构。用户可以通过鼠标的单击、双击及拖动等操作来管理这些物理结构。()多窗口、多任务功能Windows允许同时运行几个应用程序,用户无需退出一个应用程序再进入另一个应用程序,而只需简单地在各个应用程序之间来回切换。多个任务多个窗口,一个应用程序占用一个窗口,切换任务可以在窗口间转换。()独立于设备的图形开发能力Windows提供了丰富的内部例程,程序员可以直接使用菜单、对话框等组件构造友好界面。应用程序并不对硬件直接存取控制,程序员可以用一种与设备无关的方式来处理显示器、适配卡、键盘、打印机、系统定时器和通信接口等,不需要设计设备驱动程序,2.API函数和MFC类库(1)Windows应用程序编程接口API(ApplicationProgrammingInterface)或称为Windows应用程序界面(也称为编程环境),应用API编程效率高、自由度大。API函数的核心组件和功能(Win16/Win32):USER.EXE/USER32.DLL:负责用户界面和窗口消息的传递GDI.EXE/GDI32.DLL:实现与设备无关的图形操作功能。KERNEL.EXE/KERNEL32.DLL:负责内存管理、加载、执行、调度程序及规划等。(2)MFC类库(MicrosoftFoundationClass)MFC类库集成了大量已经预先定义好的类(调用API提供的基类接口),用户可以根据编程的需要调用相应的类,或根据需要自定义有关的类。MFC与API编程有许多共同之外,因MFC隐藏了大量SDK编程的复杂考虑(封装了API的细节),使用更方便。Windows操作系统是用C+编写的,用VisualC+生成的代码短小、快速、高效,是驱动程序、动态链接库的强大编程工具。,3.Windows编程的几个基本概念(1)窗口窗口是Windows应用程序基本操作的单元,是应用程序与用户交互的接口环境,也是系统管理应用程序的基本单位。窗口是一个接收和处理消息的对象,也是一个虚拟屏幕。用户的键盘、鼠标都送到该窗口中处理,输出文本或绘图也限制在窗口中。Windows应用程序可创建一个或多个窗口,在窗口中编写窗口过程。应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。(2)事件驱动Windows程序是由事件或消息产生驱动处理过程:每一个事件的发生,将在对应的消息队列中放一条消息,消息循环系统捕获消息去处理。消息是描述事件发生的信息,如:按下鼠标键时,系统就会产生一条鼠标按键事件。Windows程序的执行顺序取决于事件发生的顺序。(3)句柄句柄(handle)是应用程序标识一个对象(如:窗口、菜单、实例等)的唯一表值(4字节整数索引值),应用程序通过句柄可以访问到对象。实例句柄,实例是程序加载运行的备份,系统为实例分配的句柄。常用部分句柄类型(表3-l),(4)消息结构MSG的类型定义MSG在头文件windows.h中,格式如下:typedefstructtagMSG/在C中定义一个结构体类型要用typedef,MSG/是structtagMSG的别名。HWNDhwnd;/消息接收的窗口句柄UINTmessage;/消息编号,用以标识消息WPARAMwParam;/消息附加信息,16位的消息参数LPARAMlParam;/消息附加信息,32位的消息参数DWORDtime;/消息被放入消息队列时的时间POINTPt;/消息被放入消息队列的光标位置MSG;/结构别名:MSG,为以后应用使用。消息(message)的主要信息:窗口句柄:因所有消息都发往窗口,提供消息发往的窗口索引消息号:由事先定义好的消息名标识,表示消息类型;字参数(wParam)和长字参数(lParam):提供消息的附加信息(关键信息)。message标识不同消息(值),以“WM”前缀开头,各类消息标识的定义在头文件Windows.h中。例,选择采单项(一种命令)时将会产生消息WMCOMMAND。time消息被放入消息队列的时间;Pt消息被放入队列时鼠标的位置,仅供Windows系统使用,不传给窗口函数WndProc。它是POINT结构变量。,POINT结构的类型定义格式POINT结构的类型定义在头文件windows.h中:typedefstructtagPOINTintx;/x坐标值inty;/y坐标值POINT;消息宏(标识)的常用前缀(P42)系统定义的消息分类,不同的前缀符号经常用于消息宏识别:BM表示按钮控件消息。CB表示组合框控件消息。DM表示默认下压式按钮控件消息。EM表示编辑控件消息。LB表示列表框控件消息。SBM表示滚动条控件消息。WM表示窗口消息。,32Windows应用程序常用消息(在相关内容中介绍)33Windows中的事件驱动程序设计DOS下程序设计使用过程驱动的方法,程序按规定好的步骤操作。Windows程序设计用事件驱动方法,程序是处理发生消息的过程。34Windows应用程序的基本结构341windows应用程序的常用构成文件windows应用程序常用的文件类扩展名文件类型.c或.cppc或C+源程序文件.h头文件,包含外部常量、变量、数据结构和函数定义和说明等.rc资源描述文件,定义源程序使用的资源.dsw项目工作区文件,级别最高,点击它可打开一个项目。它包含了源文件清单、编译/连接选择、路径等设置。.dsp项目文件.opt存放dsw文件中要用到的本地计算机有关配置信息,文件不能在不同计算机上共享。,3.4.2应用源程序的基本构成(框架),Windows应用程序,创建窗口类,注册窗口类,创建窗口,显示窗口,消息循环,窗口函数1,窗口函数n,入口函数WinMain,应用程序队列1,应用程序队列n,消息n,系统消息队列,Windows应用程序的基本结构,以窗口为基础,由入口函数WinMain、窗口函数WndProc(窗口处理函数或窗口过程)等组成。1WinMain函数的主要功能结构WinMain是Windows应用程序的入口,类似C中的main函数,其功能是被系统调用。WinMain的主要结构:变量定义、初始化创建窗口类、注册窗口类:定义窗口的总体特征创建窗口:定义窗口的细节消息循环:检测应用程序消息队列是否有消息,若收到消息,调对应的处理过程。当消息循环检索到WM_QUIT消息时,终止程序运行。,(1)WinMain函数原型说明intWINAPIWinMain(HINSTANCEhThisInst,/应用程序当前实例句柄HINSTANCEhPrevInst,/应用程序其他实例句柄LPSTRlpszCmdLine,/指向程序命令行参数的指针IntnCmdShow)/应用程序开始执行时窗口显示方式的整数值标识启动应用程序时,Windows把四个参数通过启动代码间接地传给WinMain函数,并自动赋上当前实例句柄给hThisInst。WINAPI,在windef.h中定义的宏,在Win32中WINAPI被定义为FARPASCAL,用来指示WinMain的参数入栈次序:括号内左边的参数先入栈,右边的参数后入栈。hThisInst。每执行一次应用程序(instance),都使用一个实例句柄。hPrevInst,先前的实例句柄。同一个程序打开两次,出现两个窗口,第一次打开的窗口就是先前实例的窗口。对于一个32位程序,该参数总为NULL。lpszCmdLine。是一个以空终止的字符串,指定传递给应用程序的命令行参数。如系统将某个文本文件中的字符串作为命令行参数传给WinMain函数,以实现在windows下的操作。,nCmdShow:指明窗口如何显示。该参数可以是下列值之一:SW_HIDE:隐藏窗口并且激活另外一个窗口。SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口(与SW_SHOWNORMAL相同)。SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。SW_SHOWMAXIMIZED:激活窗口并且将其最大化。SW_SHOWMINIMIZED:激活窗口并将其最小化(以图标显示)。SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。激活窗口维持激活状态。SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置(与SW_RESTORE相同)。,(2)初始化窗口类的定义、注册、创建窗口实例和显示窗口。可先定义一些与其相关的变量。定义变量先定义窗口句柄变量、消息结构变量、窗口类的结构变量等:HWNDhwnd;/HWND为窗口句柄类,hwnd为窗口句柄变量名MSGMsg;/MSG为消息结构,msg为消息结构变量名WNDCLASSwndclass;/WNDCLASS为窗口类的结构,/wndclassc为窗口类结构变量名charlpszClassName=“窗口”;/窗口类名charlpszTitle=“My_Windows”;/窗口标题名,窗口类及预定义在Windows.h中的WNDCLASS结构定义:typedefstructtagWNDCLASSUINTstyle;/窗口类风格WNDPROClpfnWndProc;/窗口处理函数指针intcbClsExtra;/窗口类附加数据intcbWndExtra;/窗口附加数据HANDLEhInstance;/当前实例句柄HICONhIcon;/窗口的最小化图标HCURSORhCursor;/窗口内光标HBRUSHhbrBackground;/窗口背景色LPSTRlpszMenuName;/窗口中菜单指针LPSTRlpszClassName;/窗口类名WNDCLASS;窗口类风格(style)值:标识值意义CS_BYTEALIGNCLIENT水平方向将窗口的客户区与字边界对齐CS_BYTEALIGNWINDOW水平方向将窗口与字边界对齐CS_CLASSDC向窗口类赋显示环境,各窗口共享CS_DBCLKS向窗口发鼠标双击消息CS_GLOBALCLASS定义全局窗口类CS_HREDRAW窗口水平大小变化后重画窗口CS_VREDRAW窗口垂直大小变化后重画窗口,窗口类预定义实例给窗口变量wndclass赋值,完成窗口的形式与功能的定义:wndclass.style=0;/窗口类型为缺省类型wndclass.lpfnWndProc=WndProc;/窗口处理函数为WndProcwndclass.cbClsExtra=0;/窗口类无扩展wndclass.cbWndExtra=0;/窗口实例无扩展wndclass.hInstance=hInstance;/当前实例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);/P46,函数LoadIcon为加载一个窗口图标(左上角的标志),NULL为系统预定义的,IDI_APPLICATION为缺省图标(表7-10)。wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);/P47,函数LoadCursor为加载一个窗口光标,NULL为系统预定义的,IDC_ARROW为箭头光标(表6-4)。wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);/P47,GetStockObject取得系统背景刷(色),WHITE_BRUSH为白色(表4-6)。wndclass.lpszMenuName=NULL;/窗口中无菜单wndclass.lpszClassName=lpszClassName;/窗口类名为“窗口”,每个应用程序都有窗口类,为创建窗口用。,注册窗口类预定义的窗口类必须注册才能使用。窗口类的注册函数:RegisterClass(/不使用该值,显示窗口由ShowWindow和UpdateWindow函数实现。显示窗口(除客户区)函数ShowWindow(hwnd,nCmdShow)hwnd创建窗口的句柄;nCmdShow指定窗口初显的形式(表3-6),不显示客户区。绘制窗口客户区函数UpdateWindow(hwnd)调用函数UpdateWindow,产生WM_PAINT消息,更新(重绘)客户区。消息循环消息循环机制窗口工作后,Window监视所有设备,若有消息,将消息放入系统消息队列,再复制到相应的应用程序消息队列中,通过消息循环检测消息,并将每一个消息发送给相应窗口函数中。消息循环的函数MSGMsg;/消息变量,在前面定义while(GetMessage(Msg,NULL,0,0)TranslateMessage(Msg);DispatchMessage(Msg);returnmsg.wParam;,函数GetMessage从消息应用程序队列中读取一个消息,并将消息放在为窗口指定的消息结构变量Msg中。函数GetMessage的原形声明:GetMessage(lpMSG,/指向MSG结构变量的指针hwnd,/窗口句柄,用于检测该窗口的消息nMsgFilteMin,/用于消息过滤的最小消息号值nMsgFilterMax)/用于消息过滤的最大消息号值函数TranslateMessage将虚拟键(键入)消息转为ASCII码字符消息(WM_CHAR),其原形声明:TranslateMessage(lpMSG)函数DispatchMessage将lpMSG指向的消息,传送到对应窗口函数(过程),其原形声明:DispatchMessage(lpMSG),当GetMessage函数返回零值,即检索到WM_QUIT消息,结束循环并退出。returnMsg.wParam;/有消息时,返回Msg中的附加信息(wParam)2窗口函数(过程)窗口函数,定义不同消息响应的处理过程。根据消息转向程序窗口函数由一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。,窗口函数的一般形式LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)switch(message)casebreak;caseWM_DESTROY:PostQuitMessage(0);/调用PostQuitMessage发出WM_QUIT消息default:/采用系统消息默认处理函数returnDefWindowProc(hwnd,message,wParam,lParam);return(0);,WMDESTROY消息当在系统菜单选择菜单项“关闭”(Close)结束程序时,发出这个消息。CaseWM_DESTROY:PostQuitMessage(0);break;WMDESTROY消息,主要使程序做清理工作,然后再关闭。对话框要求用户确认是否关闭,确认关闭时,将保存一些文件。PostQuitMessage(0)函数,将把WMQUIT消息放入应用程序的稍息队列,终止WinMain函数的消息处理循
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级物理下册123水能和风能省公开课一等奖新课获奖课件
- 图形的旋转课件北师大版八年级数学下册
- 工程部业务培训课件模板
- 山东省青岛市开发区实验2024年数学八上期末质量跟踪监视试题含解析
- 山东省垦利区2025届数学八年级第一学期期末调研试题含解析
- 湖南省长沙市师大附中教育集团第十2024年七上数学期末检测试题含解析
- 贵州人文考试试题及答案
- 2025届江苏省南京玄武区数学九上期末学业水平测试模拟试题含解析
- 安庆医药高等专科学校《诊断学C》2023-2024学年第一学期期末试卷
- 2025届西藏自治区拉萨市达孜区孜县数学九上期末教学质量检测模拟试题含解析
- GB/T 90.1-2023紧固件验收检查
- 高二数学基础怎样提高
- TZJATA 0011-2022 土壤有机酸(甲酸、乙酸、丙酸、丙烯酸)的测定 高效液相色谱法
- WB/T 1115-2021体外诊断试剂温控物流服务规范
- GB/T 32350.2-2015轨道交通绝缘配合第2部分:过电压及相关防护
- GB/T 23261-2009石材用建筑密封胶
- GB/T 1796.1-2016轮胎气门嘴第1部分:压紧式内胎气门嘴
- 转包违法分包等违法行为认定查处管理办法讲座课件
- 哔哩哔哩认证公函
- 托玛琳养生碗gg课件
- 水产养殖示范基地建设项目实施方案
评论
0/150
提交评论