Windows编程基础知识_第1页
Windows编程基础知识_第2页
Windows编程基础知识_第3页
Windows编程基础知识_第4页
Windows编程基础知识_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.,Windows编程基础知识,.,内容提要,1Windows编程概述2基本概念3Windows程序基本结构4程序示例,.,1.1.Windows编程概述,.,1Windows编程,Windws编程在微软的Windows操作系统下编程使用的工具微软公司和其他公司(Boland等)在该操作系统下提供了了很多可视化的开发系统平台,如VC+、VB、BC、Delphi等。我们使用VC+,.,1Windows编程(续),可视化开发系统(资源和工具的集成),源程序编辑器编译器,调试工具语法检查程序修改运行监视,应用程序Help和Setup开发工具,函数库和系统函数开发工具,资源管理器各种窗口和控件的编辑器,例程库及Help,其他功能,.,2Windows程序特点,Windows程序特点1图形用户界面(窗口)统一、友好2独立于设备的图形操作(GUI)3支持多任务机制(多线程)4事件驱动的程序设计(消息队列机制)5程序和资源分开、资源共享6支持应用程序间的数据交换(剪贴板等),.,2Windows程序特点(续),一个简单的Windows程序,#includeintCALLBACKWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)/产生一个问候小窗口MessageBox(NULL,“HelloWorld!”,“SayHello”,MB_OK);return1;,.,3Windows程序设计方法,传统式写法使用C语言语法规范的API函数(ApplicationProgrammingInterface)交互式写法使用C+语法规范的MFC类库(MicrosoftFoundationClass)其他写法使用模板技术等的ATL模板库(ActiveXTemplateLibrary)和组件技术等,.,1.2.基本概念,.,1Windows程序及对象,Windows应用程序使用的界面是由各种图形元素组成的图形界面各个图形元素具有不同的功能应用程序的用户主要是通过键盘和鼠标对应用程序界面上的图形元素进行操作来与Windows应用程序进行交互的,.,1Windows程序及对象(续),在Windows程序(系统)中,存在着许多与DOS应用程序不同的复杂对象对象和句柄Windows的程序中,对象是具有规范形态和操作模式的部件,例如窗口、按钮、滚动条等;Windows把为这种复杂对象所定义的标识叫做句柄,应用程序过句柄访问相应的对象信息。句柄实际上在C/C+中实现为指针(或认为其一个长度为4字节长整数值),.,1Windows程序及对象(续),常用句柄类型HWND窗口句柄HINSTANCE当前实例句柄HCURSOR光标句柄HFONT字体句柄HPEN画笔句柄HBRUSH画刷句柄HDC设备环境句柄HICON图标句柄HMENU菜单句柄HFILE文件句柄,句柄所标识对象实例窗口按钮图标滚动条输出设备控件文件程序进程如此等等.,.,2数据类型别名,Windows应用程序中的数据量非常大,为了提高应用程序的可读性,Windows给许多基本数据类型定义了别名,例如:typedefvoid*HANDLE;typedefunsignedlongDWORD;typedefintBOOL;typedefunsignedcharBYTE;typedefunsignedshortWORD;,.,2数据类型别名(续),Windows应用程序还使用了一些结构类型的数据,例如:typedefstructtagPOINTLONGx,y;POINT;/描述了一个点的位置。,.,3窗口及其功能,窗口Windows程序界面的主要组成典型窗口及其构成,控制菜单框,标题栏,.,3窗口及其功能(续),窗口功能1系统对应用程序管理的基本单位2应用程序与用户之间交互的接口环境3Window应用程序基本的操作单元Windows应用程序编程创建一个或多个窗口Windows应用程序运行窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与交换的过程,.,4消息的概念,消息应用程序与系统及其它应用程序进行信息交换的数据结构消息的三个组成部分:消息号:由事先定义好的消息名标识字参数(wParam):提供消息的附加信息长字参数(lParam):提供消息的附加信息附加信息与具体消息号的值有关,.,4消息的概念(续),消息的结构,typedefstructtagMSGHWNDhwnd;/窗口句柄,为null,则检索队的所有消息UINTmessage;/消息号,由Windows.h中的宏定义来标识WPARAMwParam;/消息的附加信息LPARAMlParam;/消息的附加信息DWORDtime;/指定消息送至队列的时间POINTpt;/指定消息发送时屏幕光标的位置MSG;,.,4消息的概念(续),系统能产生很多消息各种消息分类,分别以不同的前缀表示:WM窗口消息BM按钮控制消息CB组合框控制消息DM默认下压式按钮控制消息EM编辑控制消息LB列表框控制消息SBM滚动条控制消息,.,4消息的概念(续),常见的Windows消息有,.,5事件及事件驱动,事件系统运行时发生的事情事件通常以以下三种方式产生:l通过输入设备,如键盘和鼠标;l通过屏幕上可视的对象,如菜单、工具栏按钮、滚动条和对话框上的控件;l来自Windows内部,如当一个后面的窗口显示到前面来时。事件的结果系统以消息的形式记录事件的结果即消息,.,5事件及事件驱动(续),Windows程序和系统是事件驱动的,事件驱动也称消息驱动,事件驱动模型如下:,.,5事件及事件驱动(续),操作系统会用特定的机构管理消息消息队列作为结果的消息,系统以队列形式进行管理操作系统(软件程序)有监控机构、管理机构、通讯机构等应用程序在这些机构的管理下运行,.,5事件及事件驱动(续),支持队列特征的消息驱动模型,.,6API函数,Windows提供了大量预定义的用C语言编写的函数和数据结构集合,该集合叫API(ApplicationProgrammingInterface)早期的Windows应用程序设计人员要使用相应的API函数来编写程序。类型别名和MSG等结构都包含在API中,.,6API函数(续),根据WindowsAPI函数的功能,可以将其分为三类:1)管理函数:实现窗口和其它对象的创建、移动和修改等功能。2)图形设备函数:实现与设备无关的图形操作功能,可以实现图形绘制。3)系统服务函数:实现与操作系统有关的多种功能,如进程线程管理、任务调度等。,.,1.3.Win32程序基本结构,.,1应用程序的组成,Windows程序分为“程序代码”和“UI(UserInterface)资源”两大部份所谓UI资源是指功能菜单、对话框外貌、程序图标、光标形状等一个完整的Windows应用程序通常包含如下几种类型的文件:C/C+语言源程序文件(.c或.cpp)头文件(.h)资源描述文件(.rc)模块定义文件(.def).,.,1应用程序的组成(续),源程序组成源程序主要由主函数(入口函数)和窗口函数及其相关函数组成WinMain和WinProc是Win32源程序主体前者是应用程序的入口,类似main函数,.,2WinMain函数,三个基本的组成部分:函数说明初始化消息循环功能注册窗口类,建立窗口及初始化进入消息循环,据消息调用相应的处理过程当消息循环检索到WM_QUIT时终止程序运行,.,2WinMain函数(续),函数(原型)说明,注意!Windows操作系统是多任务管理的,同一应用程序可能同时存在多个窗口,Windows系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识它。,intWINAPIWinMain(HINSTANCEhThisInst,应用当前实例句柄HINSTANCehPrevInst,应用其他实例句柄LPSTRlpszCmdLine,指向命令行参数的指针IntnCmdShow初始窗口显示方式的整数值标识),.,2WinMain函数(续),初始化初始化包括窗口类的定义、注册窗口类、创建窗口和显示窗口四部分。需要注意的是,在显示窗口ShowWindow函数后,需调用UpdateWindow函数更新并绘制用户区,并发出WM_PAINT消息。,.,2WinMain函数(续),消息循环应用程序通常有一段代码称为消息循环,又称为消息泵,它是程序的动力结构,形式如下,MSGmsg;/从消息队列中提取消息while(GetMessage(/将消息传送到指定窗口函数/以上出现的函数都是WindowsAPI函数,.,2WinMain函数(续),消息循环中:函数GetMessage形式为:GetMessage(lpMSG,/指向MSG结构的指针hwnd,nMsgFilteMin,/用于消息过滤的最小消息号值nMsgFilterMax/用于消息过滤的最大消息号值)GetMessage从消息队列中读取消息,并将消息放在MSG结构中,返回零值,即检索到WM_QUIT消息,程序结束循环并退出,.,2WinMain函数(续),DispatchMessage函数该函数负责将消息分发给窗口函数(可以理解为其用指针间接调用了窗口过程函数)在窗口产生过程中,要使用函数指针为窗口联系一个函数(通常为WndProc)WndProc窗口函数是程序和用户交互的主要处理部分!,.,3窗口函数WinProc,WndProc函数由一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。,WndProc,包含了对各种可能接收到的消息的处理过程,定义了应用程序对接收到的不同消息的响应,.,窗口函数的一般形式如下:LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae,WPARAMwParam,LPARAMlParam)switch(message)message为标识的消息casebreak;caseWM_DESTROY:PostQuitMessage(0);default:returnDefWindowProc(hwnd,message,wParam,lParam);return(0);,在消息处理程序段中一般都有对WM_DESTROY的处理,该消息是关闭窗口时发出的。它向应用程序发出WM_QUIT消息,请求退出处理函数:voidPostQuitMessage(intnExitCode)/nExitCode为应用程序的退出代码,为未定义处理过程的消息提供缺省处理,.,4程序与系统之间的关系,操作系统监控机构感知事件并产生消息系统将消息发给活动窗口消息队列应用程序拥有一个消息队列程序处理过程:消息泵获得消息GetMessage,然后分发消息DispatchMessage给窗口过程WndProc(函数调用过程)作相应处理返回,接下来再获取消息,如此循环重复,直到GetMessage检到WM_QUIT消息返回0值。,.,4程序与系统之间的关系(续),.,1.4.完整程序示例,.,应用程序举例,#include/包含应用程序中所需的数据类型和数据结构的定义LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);/窗口函数说明/-以下初始化窗口类-intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdShow)HWNDhwnd;MSGMsg;WNDCLASSwndclass;charlpszClassName=窗口;/窗口类名charlpszTitle=My_Windows;/窗口标题名,.,/窗口类的定义wndclass.style=0;/窗口类型为缺省类型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=GetStockObject(WHITE_BRUSH);/窗口背景为白色wndclass.lpszMenuName=NULL;/窗口中无菜单wndclass.lpszClassName=lpszClassName;/窗口类名为窗口,.,/-以下进行窗口类的注册-if(!RegisterClass(,.,/-显示窗口-ShowWindow(hwnd,nCmdShow);/-绘制用户区-UpdateWindow(hwnd);/-消息循环-while(GetMe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论