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

2016-02-19 16:40 14 1 收藏

下面是个超简单的深度解析VC中的消息(上)教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - 编程语言 】

  消息是指什么?

  消息系统对于一个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  应用程序自定义私有消息

  消息有哪几种?

  其实,windows中的消息虽然很多,但是种类并不繁杂,大体上有3种:窗口消息、命令消息和控件通知消息。

  窗口消息大概是系统中最为常见的消息,它是指由操作系统和控制其他窗口的窗口所使用的消息。例如CreateWindow、DestroyWindow和MoveWindow等都会激发窗口消息,还有我们在上面谈到的单击鼠标所产生的消息也是一种窗口消息。

  命令消息,这是一种特殊的窗口消息,他用来处理从一个窗口发送到另一个窗口的用户请求,例如按下一个按钮,他就会向主窗口发送一个命令消息。

  控件通知消息,是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通知父窗口。通知消息只适用于标准的窗口控件如按钮、列表框、组合框、编辑框,以及Windows公共控件如树状视图、列表视图等。例如,单击或双击一个控件、在控件中选择部分文本、操作控件的滚动条都会产生通知消息。 她类似于命令消息,当用户与控件窗口交互时,那么控件通知消息就会从控件窗口发送到它的主窗口。但是这种消息的存在并不是为了处理用户命令,而是为了让主窗口能够改变控件,例如加载、显示数据。例如按下一个按钮,他向父窗口发送的消息也可以看作是一个控件通知消息;单击鼠标所产生的消息可以由主窗口直接处理,然后交给控件窗口处理。

  其中窗口消息及控件通知消息主要由窗口类即直接或间接由CWND类派生类处理。相对窗口消息及控件通知消息而言,命令消息的处理对象范围就广得多,它不仅可以由窗口类处理,还可以由文档类,文档模板类及应用类所处理。

  由于控件通知消息很重要的,人们用的也比较多,但是具体的含义往往令初学者晕头转向,所以我决定把常见的几个列出来供大家参考:

  按扭控件

  BN_CLICKED    用户单击了按钮

  BN_DISABLE 按钮被禁止

  BN_DOUBLECLICKED 用户双击了按钮

  BN_HILITE  用/户加亮了按钮

  BN_PAINT 按钮应当重画

  BN_UNHILITE 加亮应当去掉

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  组合框控件

  CBN_CLOSEUP 组合框的列表框被关闭

  CBN_DBLCLK 用户双击了一个字符串

  CBN_DROPDOWN 组合框的列表框被拉出

  CBN_EDITCHANGE 用户修改了编辑框中的文本

  CBN_EDITUPDATE 编辑框内的文本即将更新

  CBN_ERRSPACE 组合框内存不足

  CBN_KILLFOCUS 组合框失去输入焦点

  CBN_SELCHANGE 在组合框中选择了一项

  CBN_SELENDCANCEL 用户的选择应当被取消

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  CBN_SELENDOK 用户的选择是合法的

  CBN_SETFOCUS 组合框获得输入焦点

  编辑框控件

  EN_CHANGE 编辑框中的文本己更新

  EN_ERRSPACE 编辑框内存不足

  EN_HSCROLL 用户点击了水平滚动条

  EN_KILLFOCUS 编辑框正在失去输入焦点

  EN_MAXTEXT 插入的内容被截断

  EN_SETFOCUS 编辑框获得输入焦点

  EN_UPDATE 编辑框中的文本将要更新

  EN_VSCROLL 用户点击了垂直滚动条消息含义

  列表框控件

  LBN_DBLCLK 用户双击了一项

  LBN_ERRSPACE 列表框内存不够

  LBN_KILLFOCUS 列表框正在失去输入焦点

  LBN_SELCANCEL 选择被取消

  LBN_SELCHANGE 选择了另一项

  LBN_SETFOCUS 列表框获得输入焦点

  未完(待续...)

来源:http://www.tulaoshi.com/n/20160219/1612724.html

延伸阅读
1、windows的消息驱动体系 在windows系统中,消息传递是实现对乡间通信和控制的主要手段。可以额系统都以消息驱动的方式工作。系统中发生的用户输入操作、显示信息的改变、系统环境参数变化等所有时间都以系统定义消息的形式出现在相关的应用程序和窗口。所以程序设计的主要任务就是为这些消息的处理设计代码。 在应用程序中,发...
标签: iPhoneX 智能手机
iPhoneX深度解析,内置神秘芯片 规格参数 屏幕尺寸5.8英寸,重量174克,高度143.6mm,宽度和厚度分别为70.9mm、7.7mm,2436 * 1125 像素分辨率,458 ppi。 背部后置双摄,为1200万像素广角镜头(F/1.8光圈)+1200万像素长焦镜头(F/2.4光圈)组合,支持人像模式背景虚化。 处理器:A11 Bionic采用6核64位架构,集成M11...
标签: PS PS教程
305911是什么?就是一个数学表达式,也就是0.3R+0.59G+0.11B。在photoshop中,它究竟是计算什么的一个数学表达式?有人说是lab中的明度;也有人说它是灰度模式中的灰度;也有人说它是RGB模式中的亮度(也就是直方图中的亮度)。这对操作者来讲研究它意义并不大,图像的操作有更多的主观成份。但对研究者来讲,弄清它究竟...
     在进行DLL开发过程中,尤其在进行底层硬件开发过程中,比如实时接收数据,进程需要和应用程序进行交互,而DLL和应用程序最好的交互就是发消息了,在DLL中定义消息的方式和在应用程序中定义消息的方式非常相似。下面谈谈这两种定义的方法:   一、在应用程序自定义消息方法:  一般自定义消息有一定...
大凡用过电脑,上过网的朋友都用过QQ,对QQ的一些交互界面可能垂慕已久,的确,无论是其生动的企鹅形象,还是“滴滴的”消息声音,以及“刷”的菜单等功能,简单单的消息发送,以及快速的回显和众多卡通的QQ头像等铸就了其在网络的良好地位,本人对其研究虽不够透彻,但也做一些探索性的尝试,并简单的实现了比较突出的功能,在s模拟的过程...

经验教程

616

收藏

69
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部