Windows消息

定义

windows消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型在C++叫做MSG,在DelPhi中为TMsg。

附:Delphi和C/C++数据类型对照表
https://blog.csdn.net/edisator/article/details/42804045

MSG

typedef struct tagMSG {
    HWND        hwnd;      //消息所属的窗口句柄
    UINT        message;   //消息类型标识符,Windows将消息对应的数值定义为WM_XXX宏,比如:鼠标左键按下消息是WM_LBUTTONDOWN,键盘按下消息是WM_KEYDOWN,字符消息是WM_CHAR,等等
    WPARAM      wParam;    //消息附加内容,通常是一个与消息有关的常量值,也可能是窗口或控件的句柄
    LPARAM      lParam;    //消息附加内容, 通常是一个指向内存中数据的指针。wParam、lParam表示的信息随消息的不同而不同。
    DWORD       time;      //投递到消息队列的时间
    POINT       pt;         //鼠标的当前位置
#ifdef _MAC
    DWORD       lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;

附:消息标识符常量具体介绍见:https://www.jianshu.com/p/4bb349b170d1

消息分类

1.系统定义消息(System-Defined Messages)
(1)标准消息
除WM_COMMAND之外,所有以WM_开头的消息都是标准消息,如窗口、鼠标移动、窗口大小改变等,程序启动或退出甚至每一段固定的时间都会产生标准Windows消息。
1) 键盘消息
对于窗口而言,来自用户的按键输入可分为两类,一类是系统键,另一类则是非系统键。

ALT和其它键一同按下的组合称为“系统键”,窗口收到系统键之后,会自动地将它解释成系统事件,或者查阅键盘加速表,将系统键翻译成加速表指定的信息。

2)鼠标消息
当鼠标在某个窗口内移动时,Windows会不断地发出鼠标移动消息WM_MOUSEMOVE,并把鼠标的最新位置传给该窗口。如果在窗口的范围内按下鼠标左键,系统就会发出“按下左键”的WM_LBUTTONDOWN消息给该窗口,等到用户放开按键后,再发出“放开左键”的WM_LBUTTONUP消息给该窗口。

afx_msg void OnMouseMove(UINT nFlags, CPoint point);

其中,nFlags为此事件发生时,鼠标按键、键盘控制键的状态,可以是以下值的任意组合:
当用户按下CTRL键时,nFlags设置为MK_CONTROL。
当用户按下鼠标左键时,nFlags设置为MK_LBUTTON。
当用户按下鼠标中键时,nFlags设置为MK_MBUTTON。
point为鼠标的位置

(2)命令消息
来自菜单,加速键或工具栏按钮的消息。这类消息都以WM——COMMAND形式呈现。WM_COMMAND, LOWORD(wParam)表示菜单项,工具栏按钮或一般控件的ID如编辑框,按钮等。如果是控件, HIWORD(wParam)表示控件消息类型

(3)通告消息
由复杂控件产生的消息。这类消息也是以WM——COMMAND形式呈现。 这是最灵活的消息格式, 其Message, wParam, lParam分别为:WM_NOTIFY, 控件ID,指向NMHDR的指针。NMHDR包含控件通知的内容, 可以任意扩展

2.程序定义消息(Application-Defined Messages)
 用户自定义的消息, 对于其范围有如下规定:
 WM_USER: 0x0400-0x7FFF (ex. WM_USER+10)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • [{"reportDate": "2018-01-23 23:28:49","fluctuateCause": n...
    加勒比海带_4bbc阅读 4,110评论 1 2
  • 应用技巧七:自定义数字格式的经典应用 编写自定义数字格式,不仅能增强报表的可读性,还能设置一些特殊的自定义格式,简...
    陶泽昱阅读 2,593评论 0 0
  • 今天在家里帮爸妈进行年前的大扫除,一整天都灰头土脸的,除了一身灰尘外,让我感受最深的是我家里有太多没用的东西。坏掉...
    安月白阅读 3,669评论 0 3
  • 在小区带孩子的除了母亲就是爷爷奶奶,每次带宝贝出去玩,一般我都会陪她一起玩。滑滑梯也陪她一起在下面跑,起初总是听奶...
    长弓心悦阅读 1,157评论 0 0
  • 全国人大常委会委员:学前教育关乎二孩政策落地,应加大投入 12月25日,十二届全国人大常委会第三十一次会议分组审议...
    小微科技微刊阅读 1,235评论 0 0