第一章 Windows程序内部运行机制(3)消息与消息队列

  在Windows中,用户程序可以调用系统的API函数,系统也会调用用户程序,这个调用时通过消息来进行的。

  Windows程序设计是一种事件驱动方式的程序设计模式,主要基于消息。

  【例】当用户在窗口中画图的时候,按下鼠标左键,操作系统就会感知到这一事件,于是将这个事件包装成一个消息,投递到应用程序的消息队列中,然后应用程序从消息队列中取出消息进行响应。在处理过程中,操作系统会给应用程序“发送消息”。“发送消息”实际上是指操作系统调用程序中一个专门负责处理消息的函数,这个函数称为窗口过程。

1.消息

  在Windows中,消息是由MSG结构体表示的。MSG结构体定义如下:  

typedef struct tagMSG {     // msg
   HWND hwnd; //表示消息所属的窗口
   UINT message; //指定消息的标识符
   WPARAM wParam;
   LPARAM lParam;
   DWORD time;
   POINT pt;
} MSG;

  结构体中:

  第一个成员变量hwnd表示消息所属窗口。我们通常开发的应用程序都是窗口应用程序,一个消息一般都是与某个窗口相关联的。

  第二个成员变量message指定了消息的标识符。在windows中,消息是由一个数值来表示的,不同的消息对应不同的数值。为了便于记忆,windows将消息对应的数值定义为WM_XXX宏。如,鼠标左键按下的消息是WM_LBUTTONDOWN。键盘按下的消息是WM_KEYDOWN。字符消息WM_CHAR等等。

  第三个、第四个成员变量wParam和lParam,用于指定消息的附加信息。用于指定消息的附加信息。例如,当我们收到一个自负消息的时候,message成员变量的值就是WM_CHAR,但用户到底输入的是什么字符,那么由wParam和lParam来说明。wParam、lParam表示的信息随消息的不同而不同。

  最后两个变量分别表示消息投递到消息队列中的事件和鼠标的当前位置。

2.消息队列

  每一个Windows应用程序开始执行后,系统都会为该程序创建一个消息队列,这个消息队列用来存放该程序创建的窗口消息。例如,当按下鼠标左键的时候,将会产生WM_LBUTTONDOWN消息,系统会将这个消息放到窗口所属的应用程序的消息队列中,等待应用程序的处理。Windows将产生的消息依次放到消息队列中,而应用程序则通过一个消息循环不断地从消息队列中取出消息,并且进行响应。

3.进队消息和不进队消息

  进队消息将由系统放入到应用程序的消息队列中,然后由应用程序取出并发送。不进队消息在系统调用窗口过程时直接发给窗口。无论是进队消息还是不进队消息,最终都由调用窗口过程函数队消息进行处理。

时间: 2024-10-16 21:51:36

第一章 Windows程序内部运行机制(3)消息与消息队列的相关文章

第一章 Windows程序内部运行机制(4)WinMain函数

WinMain函数相当于main函数,作为Windows程序的入口函数.当WinMain结束或返回时,Windows程序结束. 一个win32应用程序,该程序创建一个窗口并在窗口中响应键盘与鼠标消息,程序的实现步骤为: 1.WinMain函数的定义:2.创建一个窗口:3.进行消息循环:4.编写窗口过程 WinMain函数的定义: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, in

VC++深入详解 孙鑫 第一章 Windows程序内部运行机制

1.API与SDK API (Application Programming Interface) 应用程序接口 SDK(Software Development Kit) 软件开发包,包括API函数,帮助文档,微软提供的一些辅助开发工具. 2.窗口和句柄 窗口是是屏幕上一块矩形区域,是Windows应用程序与用户进行交互的接口: 在Windows应用程序中,窗口是通过窗口句柄(资源标识)来标识的. 3.消息和消息队列 Windows程序设计是一种基于消息的事件驱动方式的程序设计模式. 每当一个

第一章 Windows程序内部运行机制(2)窗口和句柄

窗口是Windows应用程序中非常重要的元素.一个Windows应用程序至少有一个主窗口.窗口是Windows应用程序和用户进行交互的接口. 窗口通常包含标题栏.菜单栏.系统菜单.最小化框.最大化框.可调边框和滚动条. 窗口分为客户区和非客户区.应用程序通常在客户区中显示文字或绘制图形.标题栏.菜单栏.系统菜单.最小最大化框.可调边框统称为非客户区.非客户区主要由Windows系统来管理.应用程序主要管理客户区和外观及操作. 桌面也是一个窗口,称为桌面窗口,由windows系统创建和管理. 窗口

第一章 Windows程序内部运行机制(1)API和SDK

Windows操作系统提供了各种各样的函数,以方便我们开发Windows应用程序.这些函数是Windows操作系统提供给应用程序编程的接口(Application Programming Interface)简称为API函数. MSDN可以说是为微软开发人员提供的一套帮助系统,其中包含大量的开发文档.技术文章和示例代码,学会用MSDN来进行学习,对初学者来说很重要. 什么是SDK? SDK的全称是SoftwareDevelopment Kit,中文译为软件开发包.假如我们要开发呼叫中心,在购买语

第一章 Windows程序内部运行机制(4)WinMain函数(续)

4.显示及更新窗口 要让窗口显示出来,需要调用ShowWindow来显示窗口. BOOL ShowWindow( HWND hWnd, int nCmdShow ); 第一个参数是创建窗口后返回的那个窗口句柄.第二个窗口指定了窗口显示的状态.常见的状态有:SW_HIDE隐藏窗口并激活其他窗口:SW_SHOW在窗口原来的位置以原来的尺寸激活和显示窗口:SW_SHOWMAXIMIZED激活窗口并将其最大化显示:SW_SHOWMINIMIZED激活窗口并将其最小化显示:SW_SHOWNORMAL激活并

MFC第一节-windows程序内部运行机制

一.窗口 设计窗口类时: 1 typedef struct _WNDCLASS{ 2 UINT style; //如水平.垂直变化是否重绘,禁用Close,检测双击 3 WNDPROC lpfnWndProc;//窗口过程函数句柄 4 int cbClsExtra;//类附加内存 5 int cbWndExtra;//窗口附加内存 6 HANDLE hInstance;//实例句柄 7 HANDLE hIcon;//图标 8 HCURSOR hCursor;//光标 9 HBRUSH hbrBa

再理解Windows程序内部运行机制

参照孙鑫<VC++深入详解> 创建Win32程序的步骤: 1. 编写WinMain函数 2. 设计窗口类(WNDCLASS) 3. 注册窗口类 4. 创建窗口 5. 显示并更新窗口(ShowWindow(hwnd,SW_SHOWNORMAL);UpdateWindow(hwnd);) 6. 消息循环(不断地从消息队列中取出消息,并进行响应) 7. 窗口过程函数(处理发送给窗口的消息) 测试代码如下(在VS2010编译通过): #include <stdafx.h> #include

Windows程序内部运行机制

Windows程序内部运行机制 一.        API与SDK Windows操作系统提供了各种各样的函数,以方便我们开发Windows应用程序,这些函数是Windows操作系统提供给应用程序编程的接口(Application Programming Interface),简称为API函数.我们在编写Windows程序时所说的API函数,就是指系统提供的函数,所有主要的Windows函数都在Windows.h头文件中进行了说明. SDK的全称是Software Development Kit

Windows程序内部运行机制 转自http://www.cnblogs.com/zhili/p/WinMain.html

一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序就可以了,微软帮我们做了非常好的封装,以至于对于很多.NET开发人员至今也不清楚Windows 平台下程序运行的内部机制,所以本专题将深入剖析下Windows 程序的内部运行机制. 二.Windows平台下几个基础概念 有朋友会问,理解了程序运行的内部机制有什么用,因为在我们实际开发中用得微软提供的