开发学院软件开发VC 深度解析VC中的消息(上) 阅读

深度解析VC中的消息(上)

 2009-10-27 20:31:21 来源:WEB开发网   
核心提示:消息是指什么?消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉,深度解析VC中的消息(上),一个消息,是系统定义的一个32位的值,或0XC000到0XFFFF;WM_USER到0X7FFF范围的消息由应用程序自己使用;0XC000到0XFFFF范围的消息用来和其他应用程序通信,我们顺便说一下具有标

消息是指什么?

消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向Windows发出一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。

消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做MSG,MSG含有来自windows应用程序消息队列的消息信息,它在Windows中声明如下:

typedef struct tagMsg
{

    HWND  hwnd;    接受该消息的窗口句柄

    UINT  message;  消息常量标识符,也就是我们通常所说的消息号

    WPARAM wParam;   32位消息的特定附加信息,确切含义依赖于消息值

    LPARAM lParam;   32位消息的特定附加信息,确切含义依赖于消息值

    DWORD  time;    消息创建时的时间

    POINT  pt;     消息创建时的鼠标/光标在屏幕坐标系中的位置
}MSG;

消息可以由系统或者应用程序产生。系统在发生输入事件时产生消息。举个例子, 当用户敲键, 移动鼠标或者单击控件。系统也产生消息以响应由应用程序带来的变化, 比如应用程序改变系统字体改变窗体大小。应用程序可以产生消息使窗体执行任务,或者与其他应用程序中的窗口通讯。

消息中有什么?

我们给出了上面的注释,是不是会对消息结构有了一个比较清楚的认识?如果还没有,那么我们再试着给出下面的解释:

hwnd 32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。

message用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。消息标识符以常量命名的方式指出消息的含义。当窗口过程接收到消息之后,他就会使用消息标识符来决定如何处理消息。例如、WM_PAINT告诉窗口过程窗体客户区被改变了需要重绘。符号常量指定系统消息属于的类别,其前缀指明了处理解释消息的窗体的类型。

wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。

lParam 通常是一个指向内存中数据的指针。由于WParam、lParam和Pointer都是32位的,因此,它们之间可以相互转换。

消息标识符的值

系统保留消息标识符的值在0x0000在0x03ff(WM_USER-1)范围。这些值被系统定义消息使用。 应用程序不能使用这些值给自己的消息。应用程序消息从WM_USER(0X0400)到0X7FFF,或0XC000到0XFFFF;WM_USER到0X7FFF范围的消息由应用程序自己使用;0XC000到0XFFFF范围的消息用来和其他应用程序通信,我们顺便说一下具有标志性的消息值:

WM_NULL---0x0000  空消息。

0x0001----0x0087  主要是窗口消息。

0x00A0----0x00A9  非客户区消息

0x0100----0x0108  键盘消息

0x0111----0x0126  菜单消息

0x0132----0x0138  颜色控制消息

0x0200----0x020A  鼠标消息

0x0211----0x0213  菜单循环消息

0x0220----0x0230  多文档消息

0x03E0----0x03E8  DDE消息

0x0400       WM_USER

0x8000       WM_APP

0x0400----0x7FFF  应用程序自定义私有消息

1 2  下一页

Tags:深度 解析 VC

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接