Windows消息大全

消息映射宏的种类:为了简化程序员的工作,MFC定义了一系列的消息映射宏和像AfxSig_vv这样的枚举变量,以及标准消息处理函数,并且具体地实现这些函数。这里主要讨论消息映射宏,常用的分为以下几类。 1. 用于Windows消息的宏,前缀为“ON_WM_”。这样的宏不带参数,因为它对应的消息和消息处理函数的函数原型是确定的。MFC提供了这类消息处理函数的定义和缺省实现。每个这样
摘要由CSDN通过智能技术生成

消息映射宏的种类:

为了简化程序员的工作,MFC定义了一系列的消息映射宏和像AfxSig_vv这样的枚举变量,以及标准消息处理函数,并且具体地实现这些函数。这里主要讨论消息映射宏,常用的分为以下几类。

 

1. 用于Windows消息的宏,前缀为“ON_WM_”。

这样的宏不带参数,因为它对应的消息和消息处理函数的函数原型是确定的。

MFC提供了这类消息处理函数的定义和缺省实现。每个这样的宏处理不同的Windows消息。例如:宏ON_WM_CREATE()把消息WM_CREATE映射到OnCreate函数,消息映射条目的第一个成员nMessage指定为要处理的Windows消息的ID,第二个成员nCode指定为0。

 

2. 用于命令消息的宏ON_COMMAND

这类宏带有参数,需要通过参数指定命令ID和消息处理函数。这些消息都映射到WM_COMMAND上,也就是将消息映射条目的第一个成员nMessage指定为WM_COMMAND,第二个成员nCode指定为CN_COMMAND(即0)。消息处理函数的原型是void (void),不带参数,不返回值。

除了单条命令消息的映射,还有把一定范围的命令消息映射到一个消息处理函数的映射宏ON_COMMAND_RANGE。这类宏带有参数,需要指定命令ID的范围和消息处理函数。这些消息都映射到WM_COMMAND上,也就是将消息映射条目的第一个成员nMessage指定为WM_COMMAND,第二个成员nCode指定为CN_COMMAND(即0),第三个成员nID和第四个成员nLastID指定了映射消息的起止范围。消息处理函数的原型是void (UINT),有一个UINT类型的参数,表示要处理的命令消息ID,不返回值。

 

3. 用于控制通知消息的宏

这类宏可能带有三个参数,如ON_CONTROL,就需要指定控制窗口ID,通知码和消息处理函数;也可能带有两个参数,如具体处理特定通知消息的宏ON_BN_CLICKED、ON_LBN_DBLCLK、ON_CBN_EDITCHANGE等,需要指定控制窗口ID和消息处理函数。控制通知消息也被映射到WM_COMMAND上,也就是将消息映射条目的第一个成员的nMessage指定为WM_COMMAND,但是第二个成员nCode是特定的通知码,第三个成员nID是控制子窗口的ID,第四个成员nLastID等于第三个成员的值。消息处理函数的原型是void (void),没有参数,不返回值。

 

还有一类宏处理通知消息ON_NOTIFY,它类似于ON_CONTROL,但是控制通知消息被映射到WM_NOTIFY。消息映射条目的第一个成员的nMessage被指定为WM_NOTIFY,第二个成员nCode是特定的通知码,第三个成员nID是控制子窗口的ID,第四个成员nLastID等于第三个成员的值。消息处理函数的原型是void (NMHDR*,LRESULT*),参数1是NMHDR指针,参数2是LRESULT指针,用于返回结果,但函数不返回值。

 

对应地,还有把一定范围的控制子窗口的某个通知消息映射到一个消息处理函数的映射宏,这类宏包括ON__CONTROL_RANGE和ON_NOTIFY_RANGE。这类宏带有参数,需要指定控制子窗口ID的范围和通知消息,以及消息处理函数。

对于ON__CONTROL_RANGE,是将消息映射条目的第一个成员的nMessage指定为WM_COMMAND,但是第二个成员nCode是特定的通知码,第三个成员nID和第四个成员nLastID等于指定了控制窗口ID的范围。消息处理函数的原型是void (UINT),参数表示要处理的通知消息是哪个ID的控制子窗口发送的,函数不返回值。

对于ON__NOTIFY_RANGE,消息映射条目的第一个成员的nMessage被指定为WM_NOTIFY,第二个成员nCode是特定的通知码,第三个成员nID和第四个成员nLastID指定了控制窗口ID的范围。消息处理函数的原型是void (UINT, NMHDR*,LRESULT*),参数1表示要处理的通知消息是哪个ID的控制子窗口发送的,参数2是NMHDR指针,参数3是LRESULT指针,用于返回结果,但函数不返回值。

 

4. 用于用户界面接口状态更新的ON_UPDATE_COMMAND_UI宏

这类宏被映射到消息WM_COMMND上,带有两个参数,需要指定用户接口对象ID和消息处理函数。消息映射条目的第一个成员nMessage被指定为WM_COMMAND,第二个成员nCode被指定为-1,第三个成员nID和第四个成员nLastID都指定为用户接口对象ID。消息处理函数的原型是void (CCmdUI*),参数指向一个CCmdUI对象,不返回值。

 

对应地,有更新一定ID范围的用户接口对象的宏ON_UPDATE_COMMAND_UI_RANGE,此宏带有三个参数,用于指定用户接口对象ID的范围和消息处理函数。消息映射条目的第一个成员nMessage被指定为WM_COMMAND,第二个成员nCode被指定为-1,第三个成员nID和第四个成员nLastID用于指定用户接口对象ID的范围。消息处理函数的原型是 void (CCmdUI*),参数指向一个CCmdUI对象,函数不返回值。之所以不用当前用户接口对象ID作为参数,是因为CCmdUI对象包含了有关信息。

 

5. 用于其他消息的宏

例如用于用户定义消息的ON_MESSAGE。这类宏带有参数,需要指定消息ID和消息处理函数。消息映射条目的第一个成员nMessage被指定为消息ID,第二个成员nCode被指定为0,第三个成员nID和第四个成员也是0。消息处理的原型是LRESULT (WPARAM, LPARAM),参数1和参数2是消息参数wParam和lParam,返回LRESULT类型的值。

 

6. 扩展消息映射宏

很多普通消息映射宏都有对应的扩展消息映射宏,例如:ON_COMMAND对应的

ON_COMMAND_EX,ON_ONTIFY对应的ON_ONTIFY_EX,等等。扩展宏除了具有普通宏的功能,还有特别的用途。关于扩展宏的具体讨论和分析,见4.4.3.2节。

 

作为一个总结,下表列出了这些常用的消息映射宏。

表4-1 常用的消息映射宏

消息映射宏                                          用途

ON_COMMAND                   把command message映射到相应的函数

 

ON_CONTROL                    把control notification message映射到相应的函数。MFC根据不同的控制消息,在此基础上定义了更具体的宏,这样用户在使用时就不需要指定通知代码ID,如ON_BN_CLICKED。

 

ON_MESSAGE                    把user-defined message.映射到相应的函数

 

ON_REGISTERED_MESSAGE       把registered user-defined message映射到相应的函数,实际上nMessage等于0x0C000,nSig等于宏的消息参数。nSig的真实值为Afxsig_lwl。

 

ON_UPDATE_COMMAND_UI       把user interface user updatecommandmessage映射到相应的函数上。

 

ON_COMMAND_RANGE           把一定范围内的command IDs 映射到相应的函数上

 

ON_UPDATE_COMMAND_UI_RANGE 把一定范围内的user interface user update command message映射到相应的函数上

 

ON_CONTROL_RANGE            把一定范围内的control notification  message映射到相应的函数

 

WINDOWS消息说明

 

我在实际编程中越来越感到消息的响应在我们的程序中是一个非常重要的部分,有一些普通的消息我们可以在ClassWizard的添加其响应函数,但就算我们能找到一些消息但有的时候也不知道是什么意思,响应他有什么用,还有一些特殊的消息是在ClassWizard里没有的,只有有丰富经验的才知道,这对我们操作程序带来很大不便,所以我在此提议各位朋友把自己知道的消息以及参数还有VC里默认的响应函数列举出来,尽自己的努力帮助大家了解windows的消息,也帮助自己,在此我先抛砖引玉:

 

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

 

type

TMsg = packed record

hwnd: HWND;            //窗口句柄

message: UINT;           //消息常量标识符

wParam: WPARAM ;   // 32位消息的特定附加信息

lParam: LPA RAM ;    // 32位消息的特定附加信息

time: DWORD;            //消息创建时的时间

pt: TPoint;                   //消息创建时的鼠标位置

end ;

 

消息中有什么?是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:

 

hwnd

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

message

用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。

wParam

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

lParam

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

 

在vc.net 中很多函数名字有了变化,和vc6 中有点不同了。如果你想看消息windows.h文件中声明了所有的消息

 

 

(#add 待整理,按字母排序)   我需要一个消息 ,对应消息宏 及消息处理函数的表

Windows消息

  WM_NULL                     =$0000;

  WM_CREATE                   =$0001;应用程序创建一个窗口

  WM_DESTROY                 =$0002;一个窗口被销毁

  WM_MOVE                    =$0003;移动一个窗口

  WM_SIZE                     =$0005;改变一个窗口的大小

  WM_SIZING                   =532;当用户正在调整窗口大小时发送此消息给窗口;通过此消息应用程序可以监视窗口大小和位置也可以修改他们

  WM_ACTIVATE                 =$0006;一个窗口被激活或失去激活状态;

  WM_SETFOCUS                =$0007;获得焦点后

  WM_KILLFOCUS               =$0008;失去焦点

  WM_ENABLE                   =$000A;改变enable状态

  WM_SETREDRAW              = $000B;设置窗口是否能重画

  WM_SETTEXT                =$000C;应用程序发送此消息来设置一个窗口的文本

  WM_GETTEXT                 =$000D;应用程序发送此消息来复制对应窗口的文本到缓冲区

  WM_GETTEXTLENGTH       =$000E;得到与一个窗口有关的文本的长度(不包含空字符)

  WM_PAINT                   =$000F;要求一个窗口重画自己

  WM_CLOSE                   =$0010;当一个窗口或应用程序要关闭时发送一个信号

  WM_QUERYENDSESSION     = $0011;当用户选择结束对话框或程序自己调用ExitWindows函数

  WM_QUIT                       =$0012;用来结束程序运行或当程序调用postquitmessage函数

  WM_QUERYOPEN                 = $0013;当用户窗口恢复以前的大小位置时,把此消息发送给某个图标

  WM_ERASEBKGND               = $0014;当窗口背景必须被擦除时(例在窗口改变大小时)

  WM_SYSCOLORCHANGE     =$0015;当系统颜色改变时,发送此消息给所有顶级窗口

  WM_ENDSESSION             =$0016;当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束

  WM_SYSTEMERROR   =$0017;

  WM_SHOWWINDOW          =$0018;当隐藏或显示窗口是发送此消息给这个窗口

  WM_ACTIVATEAPP               = $001C;发此消息给应用程序哪个窗口是激活的,哪个是非激活的;

  WM_FONTCHANGE            =$001D;当系统的字体资源库变化时发送此消息给所有顶级窗口

  WM_TIMECHANGE           = $001E;当系统的时间变化时发送此消息给所有顶级窗口

  WM_CANCELMODE          =$001F;发送此消息来取消某种正在进行的摸态(操作)

  WM_SETCURSOR               =$0020;如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口

  WM_MOUSEACTIVATE         =$0021;当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口

  WM_CHILDACTIVATE  =$0022;发送此消息给MDI

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值