版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章 Windows 编程基础,Windows应用程序,操作系统,计算机硬件之间的相互关系,Windows应用程序是通过系统发送的消息来处理用户输入的。,向下的箭头表示操作系统可以操纵输 出设备,以执行特定的功能。 向上的箭头表示操作系统能够感知输 出设备状态的变化。 以上两者就是操作系统与计算机硬件的 关系。,关于API,向下的箭头表示应用程序可以通知操作系统执行某个具体的动作,如操作系统能够控制声卡发出声音,但它并不知道应该何时发出何种声音,需要应用程序告诉操作系统该发出什么样的声音。这个关系好比有个机器人能够完成行走的功能,但是,如果人们不告诉它往哪个方向上走,机器人是不会主动行走的。
2、这里的机器人就是操作系统,人们就是应用程序。,关于API,那么,应用程序是如何通知操作系统执行某个功能的呢?有过编程经验的读者都应该知道,在应用程序中要完成某个功能,都是以函数调用的形式实现的,同样,应用程序也是以函数调用的方式来通知操作系统执行相应的功能的。 操作系统所能够完成的每一个特殊功能通常都有一个函数与其对应,也就是说,操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这些函数的集合就是Windows操作系统提供给应用程序编程的接口(Application Programming Interface),简称Windows API。 如
3、CreateWindow就是一个API函数,应用程序中调用这个函数,操作系统就会按照该函数提供的参数信息产生一个相应的窗口。,关于消息及消息队列,向上的箭头表示操作系统能够将输入设备的变化上传给应用程序。 如用户在某个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。 好比有个蚊子叮了我们一口,我们的神经末梢(相当于操作系统)马上感知到这一事件,并传递给了我们的大脑(相当于应用程序),我们的大脑最终决定如何对这一事件作出反应,如将蚊子赶走,或是将蚊
4、子拍死。 对事件作出反应的过程就是消息响应。,关于消息及消息队列,操作系统是怎样将感知到的事件传递给应用程序的呢?这是通过消息机制(Message)来实现的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,参看MSDN。 MSG结构定义如下: typedef struct tagMSG HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; MSG;,消息驱动机制 在Windows应用程序中,是通过接收消息、分 发消息、处理消息和用户进行交互的。这种消息驱动 机制是 Wind
5、ows编程的最大特点。,关于句柄,句柄(HANDLE),资源的标识。 操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,又可将句柄细分成图标句柄(HICON),光标句柄(HCURSOR),窗口句柄(HWND),应用程序实例句柄(HINSTANCE)等等各种类型的句柄。操作系统给每一个窗口指定的一个唯一的标识号即窗口句柄。,消息队列,消息队列是一个“先进先出的缓存区”。 通常为某种变量类型的数组,消息队列的每个元素 都是一条消息,操作系统将消息按先后顺序放到消息 队列中,而应用程序总是取走队列中的第一条消息。 应用程序得到消息后,便知道了用户的操作,以及程序状态的变化。,
6、Windows应用程序的基本流程,WinMain函数,Win是多任务管理的,同一应用程序的多个窗口可能会同 时存,Win系统对每个窗口的执行称为一个实例,并用一个实例 句柄来唯一标识。 WinMain函数的说明如下: int WINAPI WinMain ( HINSTANCE hThisInst,应用程序当前实例句柄 HINSTANCe hPrevInst,应用程序其他实例句柄 LPSTR lpCmdLine, 指向程序命令行参数的指针 Int nCmdShow应用程序开始执行时窗口显示方式的整数值标识 ),窗口的创建,创建一个完整的窗口需要经过下面四个操作步骤: 设计一个窗口类; 注册窗口
7、类; 创建窗口; 显示及更新窗口。,创建窗口,HWND CreateWindow( LPCTSTR lpClassName, / 已注册的窗口类名 LPCTSTR lpWindowName, / 窗口的标题 DWORD dwStyle, / 窗口风格 int x, / 窗口的水平位置 int y, / 窗口的垂直位置 int nWidth, / 宽度 int nHeight, / 高度 HWND hWndParent, / 父窗口句柄 HMENU hMenu, / 菜单句柄 HANDLE hInstance, / 实例句柄 LPVOID lpParam / 参数数据 );,提取消息语句GetM
8、essage,BOOL GetMessage ( LPMSG lpMsg, / address of structure with message HWND hWnd, / handle of window UINT wMsgFilterMin, / first message UINT wMsgFilterMax / last message ); 解释: 1、 LPMSG lpMsg 为一个指向消息结构体的指针 在传递参数过程当中,我们不需要对其进行初始化,定义一个结构体变量,将地址存放于lpMsg中。通过函数调用,它会自动填充消息结构体的成员变量。,2、窗口句柄 即表示我们获得的是哪个窗
9、口的消息。 若将其值设置为NULL,也就是表示我们可以调用整 个线程的任何窗口的消息。 3、指定消息的最小和最大值 表示我们对消息的选择过程,只选择我们感兴趣的消 息。即我们可以指定消息的有效范围。 可以使用wMsgFilterMin , wMsgFilterMax来设定一个消息的最小,最大值。 参看:WM_KEYFIRST and WM_KEYLAST WM_MOUSEFIRST and WM_MOUSELAST,若两个值都设置为0,则函数会返回所有的消息, 即最消息没有范围的过滤。 4、函数的返回值类型:BOOL 当GetMessage使用可以得到消息,则返回为 真,则while为真,则为
10、死循环,能保证程序的不断 运行。若为假,则退出循环。,转换(翻译)消息语句TranslateMessage,BOOL TranslateMessage ( CONST MSG *lpMsg / address of structure with message ); 对取到的消息对进行转换,当我们在键盘上有按键 时,系统会产生WM_KEYDOWN, WM_KEYUP 消 息,并且参数会有刚才按键产生的一个虚拟的扫描 码, TranslateMessage会将WM_KEYDOWN, WM_KEYUP 转换为WM_CHAR 消息,并将转换完 的消息投放到消息队列当中。,传递函数DispatchMe
11、ssage,将消息传递给窗口过程,即传给回调函数。 也可以理解为: 将消息路由给了操作系统,然后操作系统去调用窗口 过程函数。 窗口过程函数:WinSunProc LRESULT CALLBACK WindowProc( HWND hwnd, / handle to window UINT uMsg, / message identifier WPARAM wParam, / first message parameter LPARAM lParam / second message parameter );,WinSunProc用来接收和处理各种不同的消息。在 VC+开发过程中,我们必须写成
12、这种形式,但是名 称可以改变,参数的类型不能改变。 DispatchMessage得到消息之后,操作系统回去调 用WinSunProc函数,并将MSG的前四个参数给了 WinSunProc,而我们要判断产生的是什么消息,利 用switch case语句进行判断,并作出相应。,窗口过程函数,第二个成员变量lpfnWndProc指定了这一类型窗口的过程函数,也称回调函数。回调函数的原理是这样的,当应用程序收到给某一窗口的消息时(还记得前面讲过的消息通常与窗口相关的吗?),就应该调用某一函数来处理这条消息。这一调用过程不用应用程序自己来实施,而由操作系统来完成,但是,回调函数本身的代码必须由应用程序
13、自己完成。对于一条消息,操作系统到底调用应用程序中的哪个函数(回调函数)来处理呢?操作系统调用的就是接受消息的窗口所属的类型中的lpfnWndProc成员指定的函数。每一种不同类型的窗口都有自己专用的回调函数,该函数就是通过lpfnWndProc成员指定的。,设计窗口类,typedef struct _WNDCLASS UINT style; WNDPROClpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTS
14、TR lpszMenuName; LPCTSTR lpszClassName; WNDCLASS;,消息对话框窗口MessageBox,int MessageBox( HWND hWnd, / handle of owner window LPCTSTR lpText, / address of text in message box LPCTSTR lpCaption, / address of title of message box UINT uType / style of message box );,HDC hdc; device context. 一个设备上下文句柄 为系统内部维
15、护的一个数据结构。 微软为我们提供了DC,用它来和设备驱动程序打交 道,借用DC我们只需要下达命令,而Windows提供了 一个抽象的接口,称为图形设备接口(GDI,Graphical Device Interface),使得用户直接利用系统的GDI 函数就能方便实现图形和文本的输出。而不关心与系 统的相连的外部设备的类型。 GetDC,/获取DC ReleaseDC /释放DC,绘制函数:,HDC BeginPaint ( HWND hwnd, / handle to window LPPAINTSTRUCT lpPaint / pointer to structure for paint
16、information ); 第一个参数都是程序的窗口句柄,第二个参数是指向 型态为PAINTSTRUCT的结构指针。PAINTSTRUCT 结构中包含一些窗口消息处理程序,可以用来更新显 示区域的内容,它是一个系统内部的结构体,我们不 关心内部的数据成员。,WndProc处理的消息为WM_PAINT,这个消息在 Windows程序设计中是很重要的。当窗口显示区域的一部分显 示内容或者全部变为“无效”,以致于必须“更新画面”时,将由 这个消息通知程序。显示区域的显示内容怎么会变得无效呢? 在最初建立窗口的时候,整个显示区域都是无效的,因为程 序还没有在窗口上画什么东西。第一条WM_PAINT消息(通常 发生在WinMain中调用UpdateWindow时)指示窗口消息处理 程序在显示区域上画一些东西。在用户改变窗口的大小后,显 示区域的显示内容重新变得无效。 wndclass结构的style字段设定为标志CS_HREDRAW和 CS_VREDRAW,这样的格式设定指示Windows,在窗口大小 改变后,就把整个窗口显示内容当成无效。,文本输出,BOOL TextOut( HDC hdc,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 综合探究民居与环境教学设计
- 龙胜各族自治县2025届数学四年级第二学期期末模拟试题(含答案解析)
- 黑龙江鹤岗市萝北县宝泉岭学校度2025年数学三下期中模拟试题(含解析)
- “找茬”操作训练前盲测测试卷及答案
- 黑龙江省黑河市嫩江县2025-2026学年数学三年级下学期期中联考试题含答案
- 2025广东果乡集团有限公司赴广州高校现场招聘企业人员19人笔试历年典型考点题库附带答案详解
- 2025广东广州番禺新华村镇银行社会招聘笔试历年典型考题及考点剖析附带答案详解
- 2025广东佛山市三水海江平建设工程有限公司第一批招聘企业工作人员拟聘用人员(第四批)笔试历年典型考点题库附带答案详解
- 2025年蚌埠机场建设投资有限公司面向社会公开招聘工作人员招聘15名笔试历年备考题库附带答案详解
- 2025年福建省晋江水务集团有限公司秋季招聘15人笔试历年难易错考点试卷带答案解析
- 24J113-1 内隔墙-轻质条板(一)
- 矿采量子传感应用
- 高考语文120个文言文实词
- 食材配送服务方案投标方案【修订版】(技术标)
- CJT273-2012 聚丙烯静音排水管材及管件
- 非正常情况接发列车作业标准
- CJJ11-2019城市桥梁设计规范(2019年版)
- LY-T 3361-2023 沉香提取物标准规范
- 抗震支吊架采购及安装工程合同
- 2023年浙江嘉兴市嘉善县祥符荡开发建设有限公司招聘笔试题库含答案解析
- 2023年高考历史试题及参考答案(上海卷)
评论
0/150
提交评论