Windows音讯机制要点

Windows音讯机制要点

三. 缘故剖析

二 新闻类型 
一) 系统定义新闻(System-Defined Messages)
 
在SDK中先行定义好的音信,非用户定义的,其范围在[0x0000, 0x03ff]时期,
能够分为以下叁类:
一>窗口音信(Windows Message) 
与窗口的里边运营有关,如创设窗口,绘制窗口,销毁窗口等。能够是相似的窗口,也可以是Dialog,控件等。
如:WM_CREATE, WM_PAINT, WM_MOUSEMOVE, WM_CTLCOLOR, WM_HSCROLL…
②>命令音信(Command Message):注意这类消息通称为WM_COMMAND
与管理用户请求有关, 如单击菜单项或工具栏或控件时, 就会发生命令音讯。
WM_COMMAND, LOWOOdysseyD(wParam)表示菜单项,工具栏开关或控件的ID。假诺是控件,
HIWOEvoqueD(wParam)表示控件消息类型
叁> 控件公告(Notify Message) 
控件公告音信, 这是最灵敏的音信格式, 其Message, wParam,
lParam分别为:WM_NOTIFY,
控件ID,指向NMHD奥迪Q5的指针。NMHDOdyssey包涵控件通告的始末, 能够轻易扩展。
二) 程序定义新闻(Application-Defined Messages) 
用户自定义的消息, 对于其范围有如下规定:
WM_USER: 0x0400-0x7FFF    (ex. WM_USER+10)
WM_APP(winver>4.0): 0x8000-0xBFFF (ex.WM_APP+4)
RegisterWindowMessage: 0xC000-0xFFFF

message: UINT / /新闻常量标志符

WM_TCARD

透过能够思疑是由于console进程在和excel用DDE新闻通讯时,console没有响应excel发送的DDE音讯,导致excel
hang住

三 新闻队列(Message Queues) 
Windows中有两连串型的新闻队列
一) 系统音讯队列(System Message Queue) 那是八个连串唯一的Queue,设备驱动(mouse,
keyboard)会把操作输入转化成消息存在系统队列中,然后系统会把此消息放到目的窗口所在的线程的信息队列(thread-specific
message queue)中等待管理
二) 线程音讯队列(Thread-specific Message Queue) 每3个GUI线程都会维护这么1个线程音讯队列。(这一个行列唯有在线程调用GDI函数时才会创制,暗中认可不创立)。然后线程讯息队列中的音讯会被送到相应的窗口进程(WndProc)管理.
小心:
线程音讯队列中WM_PAINT,WM_TIME奥迪Q3唯有在Queue中平素不任何音讯的时候才会被管理,WM_PAINT音信还会被统壹以升高成效。别的具有新闻以先进先出(FIFO)的主意被管理。

共控件如树状视图、列表视图等。比如,单击或双击二个控件、在控件中接纳一些文书、操作控件的

0x0082

澳门新萄京8522,叁.1.一 用windbg附加到excel上,输入如下命令查看主线程hang住的地点

1. 窗口进度 
各样窗口会有八个称呼窗口进度的回调函数(WndProc),它包括多个参数,分别为:窗口句柄(Window
Handle),音信ID(Message ID),和八个新闻参数(wParam,
lParam),当窗口收到消息时系统就会调用此窗口进程来拍卖信息。(所以叫回调函数)

次第发送此新闻给MDI客户窗口激活下叁个或前一个窗口

WM_CHANGECBCHAIN =781

基于DDE的音信参数,可知wParam正是出殡和埋葬信息的窗口,其句柄为2425190 =
0x25016陆,反向查询知那是ShellExecuteEx创设的”WorkerW”窗口

5 PostMessage(PostThreadMessage), SendMessage 
PostMessage:把音信放到钦赐窗口所在的线程消息队列中后及时回去。
PostThreadMessage:把信息放到钦赐线程的消息队列中后旋即赶回。
SendMessage:直接把消息送到窗口进度管理,管理完了才回去。

LBN_KILLFOCUS

5.1 在API Monitor中看下PostMessageW

6 GetMessage, PeekMessage 
PeekMessage会登时再次来到能够保存新闻
GetMessage在有音讯时回来会去除音信

安装窗口是还是不是能重画

WM_CONTEXTMENU

3.3 总结

E N _ V S C 本田UR-V O L L用户点击了僵直滚动条音信含义

当ListBox 或 ComboBox被销毁或当一些项通过发送LB_DELETESTRING、LB_RESETCONTENT、
CB_DELETESTRING、CB_RESETCONTENT
音讯被删除时,发送此消息给控件的持有者

7 TranslateMessage, TranslateAccelerator 
TranslateMessage: 把1个virtual-key新闻转化成字符新闻(character
message),并放置当前线程的音信队列中,新闻循环下叁回抽出管理。
TranslateAccelerator:将急迅键对应到对应的美食做法命令。它会把WM_KEYDOWN 或
WM_SYSKEYDOWN转化成快捷键表中相应的WM_COMMAND或WM_SYSCOMMAND音信,
然后把转化后的 WM_COMMAND或WM_SYSCOMMAND直接发送到窗口进程管理,
管理完后才会回来。

次第发送此音讯给有个别窗口当它(窗口)的框架必须被绘制时;

WM_STYLECHANGED =125

 

4 队列新闻(Queued Messages)和非队列音信(Non-Queued Messages)
一)队列音信(Queued Messages)
 
音信会先保存在新闻队列中,消息循环会从此队列中取新闻并散发到各窗口管理
如鼠标,键盘音讯。
二) 非队列新闻(NonQueued Messages) 音讯会绕过系统新闻队列和线程音信队列直接发送到窗口进程被拍卖
如: WM_ACTIVATE, WM_SETFOCUS, WM_SETCURSOR, WM_WINDOWPOSCHANGED 
留意: postMessage发送的音信是队列消息,它会把音信Post到音讯队列中;
SendMessage发送的消息是非队列音讯, 被向来送到窗口进程管理

当系统的光阴变化时发送此音信给具有拔尖窗口

共控件如树状视图、列表视图等。举例,单击或双击八个控件、在控件中选择一些文本、操作控件的

四. 为啥双击展开excel不会hang住

9 BroadcastSystemMessage 
我们一般所接触到的音信都以发送给窗口的,其实,
信息的收信人可以是一应俱全的,它能够是应用程序(applications),
可设置驱动(installable drivers),网络设施(network drivers),
系统级设备驱动(system-level device drivers)等, 
BroadcastSystemMessage这些API能够对上述系统组件发送消息。

音讯的增进
  
有了上面包车型地铁这么些只是作为基础,大家接下去就做我们最熟知、最常用的干活:增多音信。MFC新闻的增加主要有二种格局:自动/手动,大家就以那二种方法为例,说一下什么样增加新闻。
   一、利用Class Wizard完毕全自动抬高
      在菜单中采纳View–>Class
Wizard,也得以用单击鼠标右键,选用Class Wizard,一样能够激活Class
Wizard。选择Message Map标签,从Class
name组合框中精选大家想要加多新闻的类。在Object
IDs列表框中,采取类的称呼。此时,
Messages列表框呈现此类的绝大多数(若不是整套的话)可重载成员函数和窗口音讯。类重载展现在列表的上部,以实际虚构成员函数的大小写字母来表示。别的为窗口音讯,以大写字母出现,描述了事实上窗口所能响应的消息ID。选中我们向增加的音讯,单击Add
Function按键,Class Wizard自动将该新闻增加进去。
     
有时候,大家想要加多的音讯本应有现身在Message列表中,不过正是找不到,如何是好?不要着急,大家能够运用Class
Wizard上Class Info标签以扩充音信列表。在该页中,找到Message
Filter组合框,通过它可以更换首页中Messages列表框中的选项。那里,我们挑选Window,从而展示全部的窗口音信,1把境况下,你想要增加的信息就能够在Message列表框中冒出了,假使还未曾,那就跟着往下看:)

一个DDE客户程序提交此音讯给贰个DDE服务程序来发送一个字符串给服务器让它象串行命令一样被拍卖,服务器通过付出WM_DDE_ACK音讯来作回应;

能够是ShellExecuteEx内部创制的线程,所以win7上ShellExecuteEx创制了三个线程专门用来拍卖和excel的DDE音讯通信,那样就能健康的收取管理excel发过来的WM_DDE_INITIATE消息了

八(新闻死锁( Message Deadlocks) 
假定有线程A和B, 将来有以下下步骤
一) 线程A SendMessage给线程B, A等待音信在线程B中拍卖后赶回
二) 线程B收到了线程A发来的音信,并张开拍卖, 在管理进程中,B也向线程A
SendMessgae,然后等待从A重返。
因为那时, 线程A正等待从线程B重临, 不能够管理B发来的新闻,
从而导致了/线程A,B相互等待, 造成死锁。四个线程也得以产生环形死锁。
能够使用 SendNotifyMessage或SendMessageTimeout来幸免出现死锁。

突显内部存款和储蓄器已经很少了

0x0311

正好正是开拓test.iqy的授命,表达ShellExecuteEx正是先成立了excel的进度,然后发送test.iqy的文件命令给excel展开。

程序发送此信息给MDI客户窗口重新排列全数最小化的MDI子窗口

WM_ENDSESSION

3.1 excel hang在哪里?

变动整个

鼠标移动

澳门新萄京8522 1

WM_HELP = 83

0x0228

伍. 为啥win7上不会有这么的难点

WM_MDICREATE = 544

0x0120

澳门新萄京8522 2

澳门新萄京8522 3LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
澳门新萄京8522 4{
澳门新萄京8522 5       switch(message)
澳门新萄京8522 6      {
澳门新萄京8522 7             HANDLE_MSG(hWnd,WM_COMMAND,MsgCracker);
澳门新萄京8522 8             HANDLE_MSG(hWnd,WM_DESTROY,MsgCracker);
澳门新萄京8522 9           default:
澳门新萄京8522 10                    return DefWindowProc(hWnd, message, wParam, lParam);
澳门新萄京8522 11   }
澳门新萄京8522 12  return 0;
澳门新萄京8522 13}

0x0129

 

设置消息,在用户更新设置时系统及时发送此音信;

应用程序绘制控件时,发送此消息得到以何种字体绘制控件中的文本

1> ShellExecuteEx展开test.iqy的时先创设excel进程

表A-2  常用Windows消息

//按下鼠标右键

 

当某些用户撤除程序日志激活状态,提交此音讯给程序

WM_NCRBUTTONDOWN

恍如,我们能够创立3个带窗口的主次,运营后将其挂起,那时,固然直接双击展开test.iqy也会hang住。

WM_CREATE = 1

WM_CTLCOLORBTN

2> 运行http_server.py(需先安装python)

WM_MDICASCADE = 551

0x0022

5>
excel收到WM_DDE_EXECUTE音讯后会广播WM_DDE_INITIATE信息,”WorkerW”窗口所在的console进度由于没有概念音信管理函数,ShellExecuteEx定义的”WorkerW”窗口信息管理函数得不到CPU实施机会,导致不会response该音信,从而变成excel
hang住

先后在展现前改造菜单

BN_DISABLE

1> 解压iqy_test.zip

//释放1个键

当用户自由3个键同时ALT 键还按着时交由此新闻给全体核心的窗口

澳门新萄京8522 14

WM_CANCELJOURNAL =75

四。控件最小化

复出境遇:XP sp叁 / Office 200柒(其余office版本应该也能够,未有测试)

当剪贴板包罗CF_OWNELX570DIPLAY格式的数据同时剪贴板旁观窗口的客户区要求重画;

lParam: LPA 凯雷德 AM  // 3十个人音信的特定附加音讯

 

  
首先,GetMessage从进程的主线程的信息队列中获取二个音信并将它复制到MSG结构,要是队列中平素不音信,则GetMessage函数将静观其变1个音信的来到今后才回到。假使您将2个窗口句柄作为第二个参数字传送入GetMessage,那么唯有钦赐窗口的的音讯可以从队列中赢得。GetMessage也得以从音信队列中过滤新闻只接受音信队列中落在界定内的音讯。这时候就要动用GetMessage/PeekMessage钦定三个消息过滤器。这些过滤器是2个音讯标识符的界定或许是三个窗体句柄,恐怕双方同时钦赐。当应用程序要搜索多个后入音讯队列的消息是很有用。WM_KEYFIRST
和 WM_KEYLAST 常量用于接受全数的键盘音信。 WM_MOUSEFIRST 和
WM_MOUSELAST 常量用于接受全数的鼠标音讯。 
 然后TranslateAccelerator判定该新闻是否1个开关音讯还假诺叁个加快键音讯,假使是,则该函数将把多少个开关新闻调换来3个加快键音讯传递给窗口的回调函数。管理了加快键之后,函数TranslateMessage将把多少个按钮音讯WM_KEYDOWN和WM_KEYUP转变来一个WM_CHAEscort,可是必要专注的是,音信WM_KEYDOWN,WM_KEYUP还是将传递给窗口的回调函数。     
 管理完事后,DispatchMessage函数将把此消息发送给该消息钦命的窗口中已设定的回调函数。假若音信是WM_QUIT,则
GetMessage重回0,从而退出循环体。应用程序可以选取PostQuitMessage来截止自身的音讯循环。平日在主窗口的
WM_DESTROY消息中调用。
 下边我们举一个大面积的小例子来证实这些音信泵的行使:

WM_IME_NOTIFY = 642

 

WM_MBUTTONDOWN =519

5。立刻运行荧屏爱慕(假诺计算机里没安装荧屏珍视本音信不起效能)

澳门新萄京8522 15

当用户按下由REGISTEGL450HOTKEY函数注册的热键时交因此音讯

WM_PALETTECHANGED =785

澳门新萄京8522 16

WM_DDE_ACK = WM_DDE_FIRST+ 4

在组合框中挑选了一项

3> Post WM_DDE_EXECUTE给excel,告知展开test.iqy的通令

WM_COPY = 769

0x030B

留神到win柒下PostMessageW是用的线程二调用的,搜一下线程创造API
CreateThread

当用户窗口复苏原先的分寸地方时,把此信息发送给有个别Logo

0x0055

 

WM_HANDHELDLAST =863

WM_MDIGETACTIVE

shell_execute.exe的主要code:

当一个按键控件就要被绘制时发送此音讯给它的父窗口;通过响应这条消息,全体者窗口能够

0xC000 ~ 0xFFFF

澳门新萄京8522 17

当一个美食指南就要被激活时发送此消息,它发生在用户菜单条中的某项或按下某些菜单键,它同意

WM_UNDO

当在console中调用API
ShellExecuteEx展开”test.iqy”文件时,发掘excel会hang住,console退出后excel才会响应,但直接双击”test.iqy”是未曾难点的,风趣的是以此地方只有在xp产生,在win七上从不这么些标题。

此消息发送给某些窗口来回到与某些窗口有关连的大Logo或小图标的句柄;

WM_GETDLGCODE = 135

以此窗口所属的进程PID =
0xc5四,正好是excel的进度,表达ShellExecuteEx确实发送了DDE新闻给excel,而且可执发送的新闻的thread正是主线程

//按下鼠标右键

说 明

澳门新萄京8522 18

WM_WINDOWPOSCHANGED= 71

WM_NOTIFY = 78

2. 复出步骤

应用程序发送此信息给多文书档案的客户窗口来关闭二个MDI 子窗口

用户点击了水平滚动条

在API Monitor中找找一下PostMessage的调用,果然搜到一条

WM_CLOSE = 16

WM_CUT

四> ShellExecuteEx实践达成,但并不destroy “WorkerW”窗口

WM_SIZING = 532

WM_APP = 32768

WM_PENWINLAST = 911

当释放3个键还要按住ALT键时发送此音信给持有键盘核心的窗口

澳门新萄京8522 19

C B N _ D B L C L K用户双击了3个字符串

WM_MDICREATE

三.二.1依照微软的文档可见,发送DDE音讯除了WM_DDE_INITIATE和WM_DDE_ACK之外用的都以PostMessage

澳门新萄京8522 20   #define HANDLE_MSG(hwnd,msg,fn) \
澳门新萄京8522 21             switch(msg): return HANDLE_##msg((hwnd),(wParam),(lParam),(fn));

制图编辑型控件前发送此音信给它的父窗口,可用来设置编辑框的公文和背景颜色

澳门新萄京8522 22

表A-陆  文告新闻-列表框

当调用SETWINDOWLONG函数1个或多少个 窗口的风格后发送此音讯给这些窗口

bool shell_execute_file(wstring file_path)
{
    SHELLEXECUTEINFOW shell_exec_info = { 0 };
    shell_exec_info.cbSize = sizeof(SHELLEXECUTEINFOW);
    shell_exec_info.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
    shell_exec_info.hwnd = NULL;
    shell_exec_info.lpVerb = NULL;
    shell_exec_info.lpFile = file_path.c_str();
    shell_exec_info.lpParameters = NULL;
    shell_exec_info.lpDirectory = NULL;
    shell_exec_info.nShow = SW_SHOW;
    shell_exec_info.hInstApp = NULL;
    bool ret = ShellExecuteExW(&shell_exec_info);
    printf("process handle is %p\n", shell_exec_info.hProcess);

    return ret;
}

WM_SYSCOLORCHANGE =21

当贰个应用程序传递数据给另2个应用程序时发送此新闻

call stack展现的确是ShellExecuteEx所调用

C B N _ C L O S E UP组合框的列表框被关闭

WM_DDE_FIRST = 992

澳门新萄京8522 23

//释放鼠标左键

此音信后,它发生WM_MDIACTIVE消息给MDI子窗口(未激活)激活它;

翻开参数知excel调用NtUserMessageCall()类似如下:

WM_MENUCOMMAND =294

WM_MOUSEMOVE

三.二 为了验证三.一.一的猜想,用API Monitor一下ShellExecuteEx

WM_DDE_TERMINATE =WM_DDE_FIRST + 1

0x0230

 

WM_NCDESTROY = 130

WM_PRINT = 791

消息1000为WM_DDE_EXECUTE,Post窗口句柄为0x003十17贰。

WM_GETTEXT = 13

0x0012

NtUserMessageCall(HWND_BROADCAST, WM_DDE_INITIATE)

WM_CHANGEUISTATE =295

0x030E

表明excel给所有顶层窗口发送一个WM_DDE_INITIATE音信,可是有窗口未有response

WM_UPDATEUISTATE =296

WM_MOUSEACTIVATE =33

二> 然后创造三个”WorkerW”的窗口用于DDE通讯

布告新闻(Notification
message)是指那样1种音信,3个窗口内的子控件发生了一部分思想政治工作,供给通

应用程序发送此新闻给MDI客户窗口以最大化二个MDI子窗口

查看一下buff的地方:

当用户挑选窗口菜单的一条命令或当用户接纳最大化或非常的小化时那么些窗口会接受此音信

WM_QUERYOPEN

1. 问题

L B N _ S E T F O CU S列表框得到输入核心

WM_GETMINMAXINFO

三.贰.2 为了验证三.二.一的下结论,在PostMessageW上下断点追踪一下

当用户选拔停止对话框或程序自己调用ExitWindows函数

当用户挑选某种输入语言,或输入语言的热键改换

3> 执行”shell_execute.exe test.iqy”

当调用SETWINDOWLONG函数1个或四个 窗口的风格后发送此音讯给这么些窗口

WM_MDIMAXIMIZE

因为双击打开实际是用explorer.exe张开,而explorer.exe是有窗口的,能够平时的选取管理WM_DDE_INITIATE消息

WM_USERCHANGED = 84

当三个窗口标准水平滚动条爆发二个滚动事件时发送此消息给这一个窗口,也发送给具备它的控件

留神到下三个API GetWindowThreadProcessId ( 0x003十17二 , 0x001二fb70
),刚好是获得那个窗口的pid和tid,查看下参数窗口:

当光标在贰个窗口的非客户区同时按下鼠标左键时交因而新闻

一个窗口被灭绝

能够见到Excel
hang在NtUserMessageCall()中,经过查询知,SendMessage()内部就是调用NtUserMessageCall()来发送消息的。

WM_WINDOWPOSCHANGING= 70

当调用SetWindowPos()函数更改窗口的轻重和任务后,发送此消息给该窗口

3个窗口被激活或失去激活状态;

0x0400

当用translatemessage函数翻译WM_KEYUP音讯时发送此新闻给具备核心的窗口

表A-5  布告新闻-编辑框

WM_PALETTEISCHANGING=784

按下鼠标左键

//按下鼠标左键

WM_DELETEITEM = 45

0x0116

WM_IME_REQUEST =648

0x002F

WM_IME_ENDCOMPOSITION= 270

WM_NCLBUTTONDOWN

//双击鼠标右键

WM_NCCALCSIZE

WM_PASTE = 770

WM_COMPACTING

 

单击开关

WM_DROPFILES = 563

0x0126

当光标在一个窗口的非客户区内移动时发送此消息给这一个窗口
//非客户区为:窗体的标题栏及窗

在二个最小化窗口的Logo在重绘前,当Logo背景必须被重绘时,发送此新闻给该窗口

WM_TIMECHANGE = 30

当剪贴板包涵CF_OWNEMuranoDIPLAY格式的数额同时剪贴板观察窗口的客户区域的轻重缓急已经转移是此消息通过剪贴板观看窗口发送给剪贴板的全部者;

应用程序发送此音信给多文档的客户窗口来成立二个MDI 子窗口

B N _ PA I N T开关应当重画

WM_IME_STARTCOMPOSITION= 269

WM_QUEUESYNC = 35

WM_RBUTTONDOWN =516

当Button,ComboBox,list box,ListView,Menu
项被创建时,发送此音讯给控件的持有者

WM_DDE_LAST =WM_DDE_FIRST + 8

0x00A3

澳门新萄京8522 24while(GetMessage(&msg, NULL, 0, 0))
澳门新萄京8522 25{
澳门新萄京8522 26       if(!TranslateAccelerator(msg.hWnd, hAccelTable, &msg))
澳门新萄京8522 27      { 
澳门新萄京8522 28            TranslateMessage(&msg);
澳门新萄京8522 29            DispatchMessage(&msg);
澳门新萄京8522 30       }
澳门新萄京8522 31}

表A-四  通告音讯-组合框

WM_MDIACTIVATE =546

WM_QUIT

WM_DDE_UNADVISE =WM_DDE_FIRST + 3

体现内部存款和储蓄器已经很少了

WM_NCCREATE = 129

在被出示前发送此音讯对话框,经常用此音信初叶化控件和奉行其余义务

WM_PAINTCLIPBOARD =777

WM_QUERYDRAGICON =55

多个DDE客户程序通过此音讯公告一个DDE服务程序不更新钦赐的项或3个卓绝的剪贴板格式的项

当一个列表框控件将在被绘制前发送此消息给它的父窗口;通过响应这条音讯,全部者窗口可以

澳门新萄京8522 32if (::PeekMessage(&msg, m_hWnd, WM_KEYFIRST,WM_KEYLAST, PM_REMOVE))
澳门新萄京8522 33{
澳门新萄京8522 34          if (msg.message == WM_KEYDOWN && msg.wParam == VK_ESCAPE)...
澳门新萄京8522 35}
澳门新萄京8522 36

WM_HSCROLLCLIPBOARD

WM_SETCURSOR = 32

WM_PRINT

澳门新萄京8522 37void MsgCracker(HWND hWnd,int id,HWND hWndCtl,UINT codeNotify)
澳门新萄京8522 38{
澳门新萄京8522 39      switch(id)
澳门新萄京8522 40      {
澳门新萄京8522 41     case ID_A:
澳门新萄京8522 42                  if(codeNotify==EN_CHANGE)澳门新萄京8522 43
澳门新萄京8522 44                  break;
澳门新萄京8522 45     case ID_B:
澳门新萄京8522 46                  if(codeNotify==BN_CLICKED)澳门新萄京8522 47
澳门新萄京8522 48                  break;
澳门新萄京8522 49             澳门新萄京8522 50.
澳门新萄京8522 51       }
澳门新萄京8522 52}
澳门新萄京8522 53

//释放鼠标中键

B N _ D I S A B L E//按键被明确命令禁止

0x0304

此音讯由多少个LBS_WANTKEYBOA悍马H2DINPUT风格的列表框发送给她的主人来响应WM_CHAR消息

WM_CTLCOLOREDIT

WM_SYSCOMMAND = 274

WM_CTLCOLORLISTBOX

WM_MOVE = 3

应用程序发送此音信获得当前控件绘制文本的字体

当设备的硬件配置改换时发送此音信给应用程序或设施驱动程序

当显示屏的分辨率改换后发送此音讯给全数的窗口

L B N _ S E L C H AN G E接纳了另壹项

WM_NCCREATE

WM_ENTERIDLE = 289

用户的选用将被奉行

WM_MOUSELEAVE = 675

B N _ C L I C K E D//用户单击了按键

WM_GETFONT = 49

组合框失去输入大旨

当用户挑选某种输入语言,或输入语言的热键改换

当光标位于菜单项上时,释放鼠标右键发生此消息

发送给最小化窗口当它Logo将在被重画

应用程序发送此音信来设置二个窗口的公文

WM_MBUTTONUP = 520

知父窗口。通告新闻只适用张晓芸规的窗口控件如开关、列表框、组合框、编辑框,以及Windows
九五公

收获主旨后

当光标在有个别非激活的窗口中而用户正按着鼠标的某部键发送此音信给当下窗口

WM_SYSKEYUP = 261

应用程序发送此音讯给二个编辑框或ComboBox以撤除最终二遍操作

WM_HOTKEY = 786

CBN_SELENDCANCEL

当用户挑选一条菜单命令项或当某些控件发送一条消息给它的父窗口,3个急迅键被翻译

WM_CANCELJOURNAL

当用户按下鼠标右键同时光标又在窗口的非客户区时发送此音信

当光标在窗口的非客户区并按下鼠标中键时发送此新闻

WM_DDE_POKE =WM_DDE_FIRST + 7

绘制按键控件前发送此音信给它的父窗口,可用来安装编辑框的文件和背景颜色

//双击鼠标左键

WM_PAINT

WM_EXITSIZEMOVE =562

当用户窗口复苏原先的分寸地方时,把此新闻发送给有些Logo

先后发送此音信给MDI客户窗口以平铺方式重新排列全体MDI子窗口

WM_CONTEXTMENU =123

WM_NEXTMENU = 531

WM_PASTE = 770

WM_NCACTIVATE = 134

WM_CLEAR

贰个DDE服务程序提交此消息给DDE客户程序来传递个1多少项给客户或布告客户的一条可用数据项

当窗口退出移动或改造加大小形式循环时,发送此音信给该窗口

应用程序发送此音信仅当WINDOWS或其余应用程序发出贰个呼吁供给绘制四个应用程序的壹有的;

转移二个窗口的高低

此音信发送给将在收到核心的窗口,此音讯能使窗口在接收主题时同时有时机完毕他的逻辑调色板

WM_CHILDACTIVATE =34

WM_POWERBROADCAST =536

WM_MOUSEFIRST = 512

WM_SPOOLERSTATUS =42

14。全选

L B N _ K I L L F OC U S列表框正在失去输入主旨

0x0203

B N _ H I L I T E//用户加亮了按键

WM_SYSKEYUP = 261

当系统将在进入暂停状态时发送此消息

WM_MBUTTONDOWN

WM_IME_CHAR = 646

取得焦点的窗口达成它的逻辑调色板后发送此音讯给持有拔尖并交汇的窗口,以此

WM_ENTERMENULOOP =529

0x0138

出殡此新闻给控件的持有者

改变enable状态

发送此消息文告应用程序的主窗口that已经进去了菜单循环形式

说 明

WM_IME_KEYUP = 657

0x0114

WM_RENDERFORMAT =773

WM_COMPACTING = 65

出殡此新闻给2个会话框程序去改换宗旨地点

WM_SYSCOMMAND

当系统颜色改造时,发送此音信给持有一流窗口

应用程序发送此音讯给1个编辑框或ComboBox以从剪贴板中拿走数码

组合框

WM_IME_KEYUP = 657

MFC音信的拍卖完结情势
  初看MFC中的各类信息,以及在脑力中根深蒂固的C++的震慑,我们兴许很当然的就会想到利用C++的三大特征之一:虚拟机制来兑现音讯的传递,可是透过分析,大家看看事情并不是想大家想象的那样,在MFC中国国投息是经过一种所谓的信息映射机制来拍卖的。
  为何呢?在潘爱中华民族解放先锋生翻译的《Visual
C++技巧内幕》(第4版)中付出了详实的来头表达,作者再简单来讲3回。在CWnd类中山学院约有111个新闻,还有别的的MFC的类呢,算起来信息太多了,在C++中对先后中用到的每3个派生类都要有1个vtable,每1个虚函数在vtable中都要侵吞三个4字节高低的入口地址,那样1来,对于每种特定类型的窗口或控件,应用程序都急需一个440KB大小的表来支持虚拟音信控件函数。
  要是说上边的窗口或控件能够勉强实现的话,那么对于菜单命令音讯及按键命令音信啊?因为分化的应用程序有不相同的菜单和开关,大家怎么管理吧?在MFC
库的那种新闻映射系统就防止了利用大的vtable,并且可以在拍卖常规Windows音讯的还要管理千丝万缕的应用程序的授命音讯。
  说白了,MFC中的消息机制其实质是一张高大的新闻及其管理函数的次第对应表,然后加上分析管理这张表的利用框架之中的有的先后代码.那样就足以制止在SDK编程中用到的累赘的CASE语句。

应用程序发送此音讯给3个编辑框或ComboBox以解决当前选用的剧情

WM_NCMBUTTONDOWN =167

由此运用给定的相关显示设备的句柄来安装对话框的文书背景颜色

此新闻有三个LBS_WANTKEYBOA福特ExplorerDINPUT风格的产生给它的主人来响应WM_KEYDOWN消息

WM_PALETTEISCHANGING

WM_APP = 32768

WM_SIZING = 532

WM_MDIICONARRANGE =552

EN_CHANGE

WM_GETTEXTLENGTH =14

WM_NCMBUTTONDBLCL

好了,事情到了这一步,应该全套都晴朗了。
唯独,我们发掘在windowsx.h里面还有一个宏:FO凯雷德WA翼虎D_WM_XXXX,大家照旧那WM_COMMAND为例,进行分析:

当调用SetWindowLong()函数退换了窗口的三个或几个作风后,发送此音讯给该窗口

WM_SETICON = 128

当剪贴板包蕴CF_OWNE奇骏DIPLAY格式的多寡且剪贴板观望窗口的客户区域的轻重缓急已经转移时,剪贴板观察窗口发送此消息给剪贴板的全部者

消息名称

说  明

WM_NULL 

0x0000

空消息,此消息将被接收窗口忽略

WM_CREATE 

0x0001

应用程序创建一个窗口

WM_DESTROY

0x0002

一个窗口被销毁

WM_MOVE

0x0003

移动一个窗口

WM_SIZE

0x0005

改变一个窗口的大小

WM_ACTIVATE

0x0006

一个窗口被激活或失去激活状态

WM_SETFOCUS

0x0007

获得焦点后

WM_KILLFOCUS

0x0008

失去焦点

WM_ENABLE

0x000A

应用程序Enable状态改变时产生

WM_SETREDRAW

0x000B

设置窗口是否能重画

WM_SETTEXT

0x000C

应用程序发送此消息来设置一个窗口的文本

WM_GETTEXT

0x000D

应用程序发送此消息来复制对应窗口的文本到缓冲区

WM_GETTEXTLENGTH

0x000E

得到与一个窗口有关的文本的长度(不包含空字符)

WM_PAINT

0x000F

要求一个窗口重绘自己

WM_CLOSE

0x0010

当一个窗口或应用程序要关闭时发送一个信号

WM_QUERYENDSESSION

0x0011

用户选择结束对话框或应用程序自己调用ExitWindows()函数

WM_QUIT

0x0012

用来结束程序运行或应用程序调用Postquitmessage()函数来产生此消息

WM_QUERYOPEN

0x0013

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

WM_ERASEBKGND

0x0014

当窗口背景必须被擦除时(例如在窗口改变大小时)

WM_SYSCOLORCHANGE

0x0015

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

WM_ENDSESSION

0x0016

当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序

WM_SHOWWINDOW

0x0018

当隐藏或显示窗口是发送此消息给这个窗口

WM_ACTIVATEAPP

0x001C

当某个窗口将被激活时,将被激活窗口和当前活动(即将失去激活)窗口会收到此消息,发此消息给应用程序哪个窗口是激活的,哪个是非激活的

WM_FONTCHANGE

0x001D

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

WM_TIMECHANGE

0x001E

当系统的时间变化时发送此消息给所有顶级窗口

WM_CANCELMODE

0x001F

发送此消息来取消某种正在进行的操作

WM_SETCURSOR

0x0020

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

WM_MOUSEACTIVATE

0x0021

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

WM_CHILDACTIVATE

0x0022

发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活、移动、改变大小

WM_QUEUESYNC

0x0023

此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的Hook程序分离出用户输入消息

WM_GETMINMAXINFO

0x0024

当窗口要将要改变大小或位置时,发送此消息给该窗口

WM_PAINTICON

0x0026

当窗口图标将要被重绘时,发送此消息给该窗口

WM_ICONERASEBKGND

0x0027

在一个最小化窗口的图标在重绘前,当图标背景必须被重绘时,发送此消息给该窗口

WM_NEXTDLGCTL

0x0028

发送此消息给一个对话框程序以更改焦点位置

WM_SPOOLERSTATUS

0x002A

当打印管理列队增加或减少一条作业时发出此消息

WM_DRAWITEM

0x002B

当Button,ComboBox,Listbox,Menu控件的外观改变时,发送此消息给这些控件的所有者

WM_MEASUREITEM

0x002C

当Button,ComboBox,list box,ListView,Menu 项被创建时,发送此消息给控件的所有者

WM_DELETEITEM

0x002D

当ListBox 或 ComboBox 被销毁或当某些项通过发送LB_DELETESTRING、LB_RESETCONTENT、 CB_DELETESTRING、CB_RESETCONTENT 消息被删除时,发送此消息给控件的所有者

WM_VKEYTOITEM

0x002E

一个具有LBS_WANTKEYBOARDINPUT风格的ListBox控件发送此消息给它的所有者,以此来响应WM_KEYDOWN消息

WM_CHARTOITEM

0x002F

一个具有LBS_WANTKEYBOARDINPUT风格的ListBox控件发送此消息给它的所有者,以此来响应WM_CHAR消息

WM_SETFONT

0x0030

应用程序绘制控件时,发送此消息得到以何种字体绘制控件中的文本

WM_GETFONT

0x0031

应用程序发送此消息得到当前控件绘制文本的字体

WM_SETHOTKEY

0x0032

应用程序发送此消息让一个窗口与一个热键相关联

WM_GETHOTKEY

0x0033

应用程序发送此消息来判断热键与某个窗口是否有关联

WM_QUERYDRAGICON

0x0037

此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序就返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标

WM_COMPAREITEM

0x0039

发送此消息来判定ComboBox或ListBox新增加的项的相对位置

WM_COMPACTING

0x0041

显示内存已经很少了

WM_WINDOWPOSCHANGING

0x0046

当调用SetWindowPos()函数改变窗口的大小和位置后,发送此消息给该窗口

WM_POWER

0x0048

当系统将进入挂起状态时发送此消息给所有进程

WM_COPYDATA

0x004A

当一个应用程序传递数据给另一个应用程序时发送此消息

WM_CANCELJOURNAL

0x004B

当某个用户取消程序日志激活状态,发送此消息给应用程序

WM_NOTIFY

0x004E

当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口

WM_INPUTLANGCHANGEREQUEST

0x0050

当用户选择某种输入语言,或输入语言的热键改变

WM_INPUTLANGCHANGE

0x0051

当应用程序输入语言改变后发送此消息给受影响的最顶级窗口

WM_TCARD

0x0052

当应用程序已经初始化Windows帮助例程时发送此消息给应用程序

WM_HELP

0x0053

当用户按下了F1,如果某个菜单是激活的,就发送此消息给此窗口关联的菜单,否则就发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口

WM_USERCHANGED

0x0054

当用户已经登录或退出后发送此消息给所有的窗口,当用户登录或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息

WM_NOTIFYFORMAT

0x0055

公用控件和它们的父窗口通过此消息来判断在WM_NOTIFY消息中是使用ANSI还是UNICODE形式的结构,使用此控件能使某个控件与它的父控件进行相互通信

WM_CONTEXTMENU

0x007B

当用户在某个窗口中点击右键,则发送此消息给该窗口

WM_STYLECHANGING

0x007C

当将要调用SetWindowLong()函数窗口的一个或多个风格时,发送此消息给该窗口

WM_STYLECHANGED

0x007D

当调用SetWindowLong()函数改变了窗口的一个或多个风格后,发送此消息给该窗口

WM_DISPLAYCHANGE

0x007E

当显示器的分辨率改变后发送此消息给所有的窗口

WM_GETICON

0x007F

发送此消息给某个窗口,返回与某个窗口有关联的大图标或小图标的句柄

WM_SETICON

0x0080

应用程序发送此消息让一个新的大图标或小图标与某个窗口关联

WM_NCCREATE

0x0081

当某个窗口第一次被创建时,此消息在WM_CREATE消息被发送前发送

WM_NCDESTROY

0x0082

此消息通知某个窗口,正在销毁非客户区

WM_NCCALCSIZE

0x0083

当计算某个窗口的客户区大小和位置时发送此消息

WM_NCHITTEST

0x0084

移动鼠标,按住或释放鼠标时产生此消息

WM_NCPAINT

0x0085

当某个窗口的框架必须被绘制时,应用程序发送此消息给该窗口

WM_NCACTIVATE

0x0086

通过改变某个窗口的非客户区来表示窗口是处于激活还是非激活状态时,此消息被发送给该窗口

WM_NCMOUSEMOVE

0x00A0

当光标在窗口的非客户区(窗口标题栏及边框)内移动时发送此消息给该窗口

WM_NCLBUTTONDOWN

0x00A1

当光标在窗口的非客户区并按下鼠标左键时发送此消息

WM_NCLBUTTONUP

0x00A2

当光标在窗口的非客户区并释放鼠标左键时发送此消息

WM_NCLBUTTONDBLCLK

0x00A3

当光标在窗口的非客户区并双击鼠标左键时发送此消息

WM_NCRBUTTONDOWN

0x00A4

当光标在窗口的非客户区并按下鼠标右键时发送此消息

WM_NCRBUTTONUP

0x00A5

当光标在窗口的非客户区并释放鼠标右键时发送此消息

WM_NCRBUTTONDBLCLK

0x00A6

当光标在窗口的非客户区并双击鼠标右键时发送此消息

WM_NCMBUTTONDOWN

0x00A7

当光标在窗口的非客户区并按下鼠标中键时发送此消息

WM_NCMBUTTONUP

0x00A8

当光标在窗口的非客户区并释放鼠标中键时发送此消息

WM_NCMBUTTONDBLCL

0x00A9

当光标在窗口的非客户区并双击鼠标中键时发送此消息

WM_KEYDOWN

0x0100

按下一个非系统键(按下键时未按下“ALT”键)

WM_KEYUP

0x0101

释放一个非系统键

WM_CHAR

0x0102

按下某键,当TranslateMessage()转发WM_KEYDOWN后发送本消息

WM_DEADCHAR

0x0103

释放某键,当TranslateMessage()转发WM_KEYUP后发送本消息

WM_SYSKEYDOWN

0x0104

当按住ALT键同时按下其他键时发送此消息给拥有键盘焦点的窗口

WM_SYSKEYUP

0x0105

当释放一个键同时按住ALT键时发送此消息给拥有键盘焦点的窗口

WM_SYSCHAR

0x0106

当TranslateMessage()转发WM_SYSKEYDOWN后发送此消息给拥有键盘焦点的窗口

WM_SYSDEADCHAR

0x0107

当TranslateMessage()转发WM_SYSKEYUP后发送此消息给拥有键盘焦点的窗口

WM_INITDIALOG

0x0110

在被显示前发送此消息对话框,通常用此消息初始化控件和执行其他任务

WM_COMMAND

0x0111

选择窗口菜单项或某个控件发送一条消息给它的父窗口或按下一个快捷键时产生此消息

WM_SYSCOMMAND

0x0112

选择窗口菜单项或选择最大化或最小化时,发送此消息给该窗口

WM_TIMER

0x0113

发生了定时器事件

WM_HSCROLL

0x0114

当窗口水平滚动条产生一个滚动事件时发送此消息给该窗口和滚动条的所有者

WM_VSCROLL

0x0115

当窗口垂直滚动条产生一个滚动事件时发送此消息给该窗口和滚动条的所有者

WM_INITMENU

0x0116

当一个菜单将要被激活时发送此消息,它发生在按下菜单项或按下菜单快捷键时,它允许程序在显示前更改菜单

WM_INITMENUPOPUP

0x0117

当一个下拉菜单或子菜单将要被激活时发送此消息,它允许显示前在修改菜单而不必更改整个菜单

WM_MENUSELECT

0x011F

选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)

WM_MENUCHAR

0x0120

当菜单已被激活且用户按下了某个键(非快捷键),发送此消息给菜单的所有者

WM_ENTERIDLE

0x0121

当一个有模式对话框或菜单进入空闲状态时发送此消息给它的所有者,空闲状态指在处理完一条或几条先前的消息后,消息列队为空

WM_MENURBUTTONUP

0x0122

当光标位于菜单项上时,释放鼠标右键产生此消息

WM_MENUDRAG

0x0123

当拖动菜单项时,发送此消息给拖放菜单的所有者

WM_MENUGETOBJECT

0x0124

当光标移入菜单项或者从菜单项中心移到菜单项顶部或底部时,发送此消息给拖放菜单的所有者

WM_UNINITMENUPOPUP

0x0125

当下拉菜单或者子菜单被销毁时产生此消息

WM_MENUCOMMAND

0x0126

当用户选择菜单项时产生此消息

WM_CHANGEUISTATE

0x0127

应用程序发送此消息表明用户界面(UI)状态应当被改变

WM_UPDATEUISTATE

0x0128

应用程序发送此消息改变指定窗口及其子窗口的用户界面(UI)状态

WM_QUERYUISTATE

0x0129

应用程序发送此消息得到某个窗口的用户界面(UI)状态

WM_CTLCOLORMSGBOX

0x0132

绘制消息框前发送此消息给它的父窗口,通过响应这条消息,父窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色

WM_CTLCOLOREDIT

0x0133

绘制编辑型控件前发送此消息给它的父窗口,可用来设置编辑框的文本和背景颜色

WM_CTLCOLORLISTBOX

0x0134

绘制列表框控件前发送此消息给它的父窗口,可用来设置编辑框的文本和背景颜色

WM_CTLCOLORBTN

0x0135

绘制按钮控件前发送此消息给它的父窗口,可用来设置编辑框的文本和背景颜色

WM_CTLCOLORDLG

0x0136

绘制对话框前发送此消息给它的父窗口,可用来设置编辑框的文本和背景颜色

WM_CTLCOLORSCROLLBAR

0x0137

绘制滚动条控件前发送此消息给它的父窗口,可用来设置滚动条控件的文本和背景颜色

WM_CTLCOLORSTATIC

0x0138

绘制静态控件前发送此消息给它的父窗口,可用来设置静态控件的文本和背景颜色

WM_MOUSEMOVE

0x0200

鼠标移动

WM_LBUTTONDOWN

0x0201

按下鼠标左键

WM_LBUTTONUP

0x0202

释放鼠标左键

WM_LBUTTONDBLCLK

0x0203

双击鼠标左键

WM_RBUTTONDOWN

0x0204

按下鼠标右键

WM_RBUTTONUP

0x0205

释放鼠标右键

WM_RBUTTONDBLCLK

0x0206

双击鼠标右键

WM_MBUTTONDOWN

0x0207

按下鼠标中键

WM_MBUTTONUP

0x0208

释放鼠标中键

WM_MBUTTONDBLCLK

0x0209

双击鼠标中键

WM_MOUSEWHEEL

0x020A

当鼠标滚轮转动时发送此消息给当前获得焦点的窗口

WM_PARENTNOTIFY

0x0210

当MDI子窗口被创建或被销毁,或当光标位于子窗口上且用户按了一下鼠标键时,发送此消息给它的父窗口

WM_ENTERMENULOOP

0x0211

发送此消息通知应用程序的主窗口进程已经进入了菜单模式循环

WM_EXITMENULOOP

0x0212

发送此消息通知应用程序的主窗口进程已经退出了菜单模式循环

WM_SIZING

0x0214

调整窗口大小时发送此消息给窗口,通过此消息应用程序可以监视或修改窗口大小和位置

WM_CAPTURECHANGED

0x0215

当窗口设定为不捕获鼠标事件时,发送此消息给该窗口

WM_MOVING

0x0216

移动窗口时发送此消息给窗口,通过此消息应用程序可以监视或修改窗口大小和位置

WM_POWERBROADCAST

0x0218

发送此消息给应用程序通知它有关电源管理事件

WM_DEVICECHANGE

0x0219

当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序

WM_MDICREATE

0x0220

应用程序发送此消息给多文档的客户窗口来创建一个MDI 子窗口

WM_MDIDESTROY

0x0221

应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口

WM_MDIACTIVATE

0x0222

应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)来激活它

WM_MDIRESTORE

0x0223

应用程序发送此消息给MDI客户窗口通知子窗口恢复到原来大小

WM_MDINEXT

0x0224

应用程序发送此消息给MDI客户窗口激活下一个或前一个窗口

WM_MDIMAXIMIZE

0x0225

应用程序发送此消息给MDI客户窗口以最大化一个MDI子窗口

WM_MDITILE

0x0226

应用程序发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口

WM_MDICASCADE

0x0227

应用程序发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口

WM_MDIICONARRANGE

0x0228

应用程序发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口

WM_MDIGETACTIVE

0x0229

应用程序发送此消息给MDI客户窗口以找到激活的子窗口的句柄

WM_MDISETMENU

0x0230

应用程序发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单

WM_ENTERSIZEMOVE

0x0231

当窗口进入移动或改变大小模式循环时,发送此消息给该窗口

WM_EXITSIZEMOVE

0x0232

当窗口退出移动或改变大小模式循环时,发送此消息给该窗口

WM_DROPFILES

0x0233

当用户在应用程序窗口中拖动某个文件时,产生此消息

WM_MDIREFRESHMENU

0x0234

应用程序发送此消息给MDI客户窗口以刷新窗口菜单

WM_MOUSEHOVER

0x02A1

当光标在窗口客户区悬停超过TrackMouseEvent()指定的时间时,发送此消息给该窗口

WM_MOUSELEAVE

0x02A3

当光标离开窗口客户区超过TrackMouseEvent()指定的时间时,发送此消息给该窗口

WM_CUT

0x0300

应用程序发送此消息给一个编辑框或ComboBox以删除当前选择的文本

WM_COPY

0x0301

应用程序发送此消息给一个编辑框或ComboBox以复制当前选择的文本到剪贴板

WM_PASTE 

0x0302

应用程序发送此消息给一个编辑框或ComboBox以从剪贴板中得到数据

WM_CLEAR

0x0303

应用程序发送此消息给一个编辑框或ComboBox以清除当前选择的内容

WM_UNDO

0x0304

应用程序发送此消息给一个编辑框或ComboBox以撤消最后一次操作

WM_DESTROYCLIPBOARD

0x0307

当调用EmptyClipboard()清空剪贴板时,发送此消息给剪贴板所有者

WM_DRAWCLIPBOARD

0x0308

当剪贴板的内容变化时发送此消息给剪贴板观察链中的第一个窗口,它允许用剪贴板观察窗口来显示剪贴板的新内容

WM_PAINTCLIPBOARD

0x0309

当剪贴板包含CF_OWNERDIPLAY格式的数据且剪贴板观察窗口的客户区需要重绘时,发送此消息给剪贴板所有者

WM_VSCROLLCLIPBOARD

0x030A

当剪贴板包含CF_OWNERDIPLAY格式的数据且剪贴板观察窗口发生垂直滚动条事件时,剪贴板观察窗口发送此消息给剪贴板所有者

WM_SIZECLIPBOARD

0x030B

当剪贴板包含CF_OWNERDIPLAY格式的数据且剪贴板观察窗口的客户区域的大小已经改变时,剪贴板观察窗口发送此消息给剪贴板的所有者

WM_ASKCBFORMATNAME

0x030C

剪贴板观察窗口发送此消息给剪贴板所有者以获得CF_OWNERDISPLAY剪贴板格式的名字

WM_CHANGECBCHAIN

0x030D

当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链中的第一个窗口

WM_HSCROLLCLIPBOARD

0x030E

当剪贴板包含CF_OWNERDIPLAY格式的数据且剪贴板观察窗口发生水平滚动条事件时,剪贴板观察窗口发送此消息给剪贴板所有者

WM_QUERYNEWPALETTE

0x030F

发送此消息给将要获得键盘焦点的窗口,此消息使窗口在获得焦点时同时有机会实现它的逻辑调色板

WM_PALETTEISCHANGING

0x0310

应用程序将要实现它的逻辑调色板时发送此消息通知所有应用程序

WM_PALETTECHANGED

0x0311

获得焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠的窗口,以此

来改变系统调色板

WM_HOTKEY

0x0312

当用户按下由RegisterHotKey()注册的热键时产生此消息

WM_PRINT

0x0317

应用程序发送此消息给窗口,要求窗口在指定设备环境中绘制自己,一般情况下是打印机设备环境

WM_PRINTCLIENT

0x0318

应用程序发送此消息给窗口,要求窗口在指定设备环境中绘制窗口客户区,一般情况下是打印机设备环境

WM_APP

0x8000

帮助用户自定义消息,自定义消息可以为WM_APP+X,X为正整数

WM_USER

0x0400

帮助用户自定义消息,自定义消息可以为WM_USER+X,X为正整数

以下是易记事本里的:

表A-四  布告新闻-组合框

先后发送此新闻给MDI客户窗口用MDI菜单取代子窗口的菜系

转载:

0x002E

此音信发送给有些窗口仅当它的非客户区须求被改成来显示是激活依旧非激活状态;

当有个别窗口将被激活时,将被激活窗口和当下活动(就要失去激活)窗口会接收此音信,发此音信给应用程序哪个窗口是激活的,哪个是非激活的

此消息展现用户按下了F1,固然有个别菜单是激活的,就发送此新闻个此窗口关联的菜单,不然就

在1个对话框程序被展现前发送此音讯给它,经常用此信息初步化控件和举行别的任务

   2、手动地加上海消防息管理函数
   
假使在Messages列表框中还是看不到大家想要的音讯,那么该音信大概是被系统忽略掉大概是你和睦创设的,在那种地方下,就必须和睦手工业加多。根据大家眼下所说的新闻工作的一个部件,大家逐条实行管理:
      一) 在类的.
h文件中增加管理函数的宣示,紧接在//}}AFX_MSG行之后进入注脚,注意:一定要以afx_msg开头。
     通常,增多管理函数注解的最棒的地点是源代码中Class
Wizard维护的表上边,不过在它标志其领域的{{}}括弧外面。这个括弧中的任陈峰西都将会被Class
Wizard销毁。
      二)
接着,在用户类的.cpp文件中找到//}}AFX_MSG_MAP行,紧接在它之后参加音讯入口项。同样,也是身处{
{} }的外面
      三) 最终,在该公文中加多音讯处理函数的实业。

WM_TCARD = 82

当鼠标轮子转动时发送此音讯个当前不经常的控件

0x0013

WM_QUEUESYNC = 35

当1个下拉菜单或子菜单就要被激活时发送此新闻,它同意展现前在修改菜单而不必改变全体菜单

WM_ACTIVATEAPP = 28

当MDI子窗口被创设或被灭绝,或当光标位于子窗口上且用户按了一下鼠标键时,发送此新闻给它的父窗口

TMsg = packedrecord

也是个别对应调度控件的左宽度右宽度 顶中度 西北角 东南角 底宽度 东南角
西北角的尺寸。

WM_CAPTURECHANGED =533

end

WM_CONTEXTMENU =123

WM_MENUCHAR

hwnd
三十多少人的窗口句柄。窗口能够是其余项目标显示器对象,因为Win3二能够爱惜大大多可视对象的句柄(窗口、对话框、按键、编辑框等)。

CBN_DBLCLK

E N _ U P D AT E编辑框中的文本将在更新

E N _ U P D AT E编辑框中的文本将要更新

WM_MDIMAXIMIZE =549

WM_TIMECR-V = 275 //发生了电火花计时器事件

 

0x0312

 

用户挑选停止对话框或应用程序自个儿调用ExitWindows()函数

当用户有个别窗口中点击了须臾间右键就发送此音信给这些窗口

WM_HOTKEY = 786

WM_DRAWCLIPBOARD =776

当the list box 或 combo box 被销毁 或 当
有些项被剔除通过LB_DELETESTRING,LB_RESETCONTENT, CB_DELETESTRING, or
CB_RESETCONTENT 消息

WM_COALESCE_FIRST =912

当有些用户裁撤程序日志激活状态,提交此音信给程序

pt: TPoint / /音信创制时的鼠标地点

当WM_SYSKEYDOWN音信被TRANSLATEMESSAGE函数翻译后发送此音信给持有宗旨的窗口

经过行使给定的相关展现设备的句柄来安装静态控件的文本和背景颜色

0x0231

  音信小编是用作三个记下传递给应用程序的,这些记录中蕴涵了消息的门类以及其余音讯。举例,对于单击鼠标所发出的音信的话,那几个记录中富含了单击鼠标时的坐标。那些记录类型叫做T
M s g,它在Wi n d o w s单元中是那样表明的:

0x0024

  那里我们接受全体的键盘新闻,所以就用WM_KEYFIRST 和
WM_KEYLAST作为参数。最终三个参数能够是PM_NOREMOVE 或者
PM_REMOVE,表示新闻音信是或不是合宜从信息队列中剔除。                 
   所以那段小代码正是判断是还是不是按下了Esc键,借使是就张开处理。

0x0300

C B N _ S E L E N DO K用户的挑3拣肆是合法的

也足以修改他们;

贰个DDE客户程序提交此音讯起首二个与服务器程序的对话来响应那几个钦赐的顺序和大旨名;

WM_KEYLAST = 264

当多个窗口标准垂直滚动条产生1个轮转事件时发送此新闻给这个窗口也,发送给具有它的控件
WM_INITMENU = 278

E N _ H S C 科雷傲 O L L用户点击了档期的顺序滚动条

组合框控件
 CBN_CLOSEUP 组合框的列表框被关闭
 CBN_DBLCLK 用户双击了八个字符串
 CBN_DROPDOWN 组合框的列表框被拉出
 CBN_EDITCHANGE 用户修改了编辑框中的文本
 CBN_EDITUPDATE 编辑框内的文本将在履新
 CBN_E大切诺基智跑SPACE 组合框内部存款和储蓄器不足
 CBN_KILLFOCUS 组合框失去输入核心
 CBN_SELCHANGE 在组合框中选用了壹项
 CBN_SELENDCANCEL 用户的抉择应该被注销
 CBN_SELENDOK 用户的取舍是官方的
 CBN_SETFOCUS 组合框获得输入宗旨

用户双击了三个字符串

当程序已经初阶化windows协理例程时发送此音信给应用程序

WM_DEADCHAR

0x0318

当绘制文本时先后发送此音信获得控件要用的颜料

L B N _ S E L C H AN G E选取了另1项

透过利用给定的连带显示设备的句柄来设置列表框的文件和背景颜色

0x0220

WM_MOUSEACTIVATE =33

WM_COMMAND = 273

音信的拍卖
  接下去大家谈一下音信的拍卖,首先我们来看一下VC中的音讯泵:

WM_PENWINLAST = 911

队列音信和非队列音信
   从音信的发送渠道来看,音信能够分成2种:队列新闻和非队列消息。音信队列由得以分成种类新闻队列和线程音讯队列。系统消息队列由Windows维护,线程新闻队列则由每一个GUI线程本身实行爱护,为幸免给non-GUI现存创设音讯队列,所无线程发生时并不曾新闻队列,仅当线程第2次调用GDI函数时系统才给线程创设2个音信队列。队列音信送到系统消息队列,然后到线程音信队列;非队列消息平昔送给目标窗口进度。
    
对于队列消息,最常见的是鼠标和键盘触发的消息,比方WM_MOUSERMOVE,WM_CHA揽胜极光等音信,还有部分任何的音讯,举例:WM_PAINT、
WM_TIMER和WM_QUIT。当鼠标、键盘事件被触发后,相应的鼠标或键盘驱动程序就会把这么些事件转变到相应的音讯,然后输送到系统音讯队列,由
Windows系统去开展管理。Windows系统则在方便的机会,从系统音讯队列中抽取两个音讯,依照前边大家所说的MSG音信结构明显新闻是要被送往卓殊窗口,然后把抽出的新闻送往创设窗口的线程的对应队列,上面包车型地铁事体就该由线程新闻队列操心了,Windows起初忙本身的工作去了。线程看到本身的音讯队列中有音信,就从队列中抽取来,通过操作系统一发布送到合适的窗口进度去管理。
    
一般来讲,系统总是将音讯Post在音讯队列的最终。那样保障窗口以先进先出的一一接受消息。不过,WM_PAINT是一个见仁见智,同2个窗口的几个WM_PAINT被联合成多个 WM_PAINT 音信,
合并全数的不算区域到二个不算区域。合并WM_PAIN的目的是为着减小刷新窗口的次数。
澳门新萄京8522 54

WM_DESTROYCLIPBOARD

当有个别窗口的客户区域必须被核准时发送此音讯

WM_LBUTTONUP = 514

消息名称

说 明

EN_CHANGE

编辑框中的文本己更新

EN_ERRSPACE

编辑框内存不足

EN_HSCROLL

用户点击了水平滚动条

EN_KILLFOCUS

编辑框失去输入焦点

EN_MAXTEXT

插入的内容被截断

EN_SETFOCUS

编辑框获得输入焦点

EN_UPDATE

编辑框中的文本将要更新

EN_VSCROLL

用户点击了垂直滚动条

WM_DISPLAYCHANGE

WM_COMMAND = 273

WM_NCLBUTTONDBLCLK= 163

经过响应WM_GETDLGCODE消息,应用程序能够把她真是3个尤其的输入控件并能管理它

0x0136

WM_COPYDATA = 74

WM_ENABLE

在三个对话框程序被突显前发送此音信给它,常常用此信息起初化控件和实行其余职责

应用程序发送此音信获得有些窗口的用户分界面(UI)状态

WM_INITDIALOG = 272

按下某键,当TranslateMessage()转载WM_KEYDOWN后发送本音讯

消息名称

说 明

LBN_DBLCLK

用户双击了一项

LBN_ERRSPACE

列表框内存不足

LBN_KILLFOCUS

列表框正在失去输入焦点

LBN_SELCANCEL

用户选择被取消

LBN_SELCHANGE

用户选择将改变

LBN_SETFOCUS

列表框获得输入焦点

WM_SHOWWINDOW

WM_IME_SELECT = 645

WM_SETCURSOR = 32

程序发送此新闻给editcontrol或combobox从剪贴板中获得数码

//释放鼠标右键

//释放鼠标中键

EN_SETFOCUS

WM_SYSCHAR = 262

是还是不是感觉1个消息记录中的音讯像斯洛伐克语同样?借使是那般,那么看一看上边包车型地铁表达:

WM_DESTROYCLIPBOARD= 775

当窗口进入移动或更动大小方式循环时,发送此音讯给该窗口

突显剪贴板的新内容;

应用程序发送此音讯来安装二个窗口的文件

WM_SIZECLIPBOARD =779

出殡此音讯给窗口当它失去捕获的鼠标时;

WM_LBUTTONDOWN =513

EN_VSCROLL

此新闻在一个具有主题的窗口落成它的逻辑调色板后发送此音信给持有超级并交汇的窗口,以此

当调用ENPTYCLIPBOA奥迪Q5D函数时 发送此新闻给剪贴板的持有者

WM_DDE_REQUEST =WM_DDE_FIRST + 6

WM_NCMOUSEMOVE

新闻中有如何?
   大家提交了上边包车型客车讲授,是还是不是会对新闻结构有了一个相比清楚的认知?假使还不曾,那么大家再试着提交下边的演说:
     hwnd
三十一人的窗口句柄。窗口能够是别的类型的荧屏对象,因为Win32能够珍视大好些个可视对象的句柄(窗口、对话框、按键、编辑框等)。
    
message用于区分其余音信的常量值,这么些常量能够是Windows单元中预订义的常量,也足以是自定义的常量。新闻标记符以常量命名的艺术提议音讯的意思。当窗口过程接受到信息随后,他就会接纳新闻标记符来决定哪些管理音讯。比如、WM_PAINT告诉窗口进程窗体客户区被转移了亟待重绘。符号常量钦赐系统音信属于的等级次序,其前缀指明了拍卖解释音信的窗体的体系。
     wParam 常常是二个与音讯有关的常量值,也可能是窗口或控件的句柄。
     lParam
常常是二个针对性内部存款和储蓄器中数据的指针。由于WParam、lParam和Pointer都是33位的,因而,它们中间能够相互转变。

发送此新闻公告应用程序的主窗口that已经跻身了菜单循环形式

当系统经过爆发WM_QUE锐界YENDSESSION音讯后,此新闻发送给应用程序,

WM_ENTERSIZEMOVE

当调用SETWINDOWLONG函数将在更换八个或多少个窗口的风格时发送此音讯给那3个窗口

WM_DRAWCLIPBOARD =776

当二个窗口或应用程序要关门时发送1个时域信号

当用户双击鼠标右键同时光标有个别窗口在非客户区10发送此音信

WM_COMPACTING = 65

L B N _ S E L C A NC E L选拔被裁撤

 

WM_ENDSESSION = 22

当剪贴板的情节更换时发送此新闻给剪贴板观看链的率先个窗口;它同意用剪贴板旁观窗口来

WM_DEVICECHANGE =537

当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息

WM_SPOOLERSTATUS

发送给有关键的窗口,如若当前都未曾难点,就把此音讯发送给当前激活的窗口

Windows新闻大全

WM_EXITMENULOOP =530

三。控件最大化

获得与三个窗口有关的公文的尺寸(不分包空字符)

当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息

发送此音讯给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改动大小

0x0000

新闻分流器
  平常的窗口进程是经过1个switch语句来得以达成的,那些业务很烦,有未有更省事的诀窍吧?有,那正是新闻分流器,利用音信分流器,大家可以把switch语句分成越来越小的函数,每2个新闻都对应三个小函数,这样做的受益就是对音讯更便于管理。
  之所以被叫作音讯分流器,正是因为它能够对其余新闻进行疏散。上面大家做二个函数就很掌握了:

0x0310

消息名称

说 明

CBN_CLOSEUP

组合框的列表框被关闭

CBN_DBLCLK

用户双击了一个字符串

CBN_DROPDOWN

组合框的列表框被拉下

CBN_EDITCHANGE

用户修改了组合框中的文本

CBN_EDITUPDATE

组合框内的文本即将更新

CBN_ERRSPACE

组合框内存不足

CBN_KILLFOCUS

组合框失去输入焦点

CBN_SELCHANGE

在组合框中选择了一项

CBN_SELENDCANCEL

用户的选择将被忽略

CBN_SELENDOK

用户的选择将被执行

CBN_SETFOCUS

组合框获得输入焦点

lParam
平常是贰个针对内部存款和储蓄器中多少的指针。由于WParm、lParam和Pointer都是三十个人的,由此,它们中间可以相互转变。

WM_SETHOTKEY = 50

发出了沙漏事件

WM_MENUDRAG = 291

控件.发送音信 (27肆,61473,
0)在那之中参数一的值自6147二—614八7都可用,结果是千篇一律的。

转移三个窗口的高低

0x0211

WM_DDE_INITIATE =WM_DDE_FIRST + 0

0x0081

WM_KEYUP = 257

CBN_SETFOCUS

WM_SHOWWINDOW = 24

应用程序发送此新闻来判别热键与某些窗口是不是有关联

E N _ M A X T E X T插入的始末被截断

WM_USERCHANGED

WM_MENURBUTTONUP =290

选取一条菜单项时发送此音信给菜单的持有者(一般是窗口)

先后发送此音信给3个编辑框或combobox来复制当前甄选的文件到剪贴板

WM_SPOOLERSTATUS =42

当有个别窗口首回被创制时,此消息在WM_CREATE音信发送前发送;

EN_HSCROLL

WM_MENUCHAR = 288

当二个窗口标准垂直滚动条发生三个轮转事件时发送此新闻给这个窗口也,发送给拥有它的控件
WM_INITMENU = 278

WM_GETDLGCODE = 135

0x000F

WM_MDISETMENU = 560

当剪贴板包涵CF_OWNE奥迪Q伍DIPLAY格式的数目且剪贴板观看窗口暴发水平滚动条事件时,剪贴板旁观窗口发送此音讯给剪贴板全数者

出殡此音讯给窗口当它失去捕获的鼠标时;

组合框

应用程序发送此音信来判断热键与某些窗口是还是不是有关联

TMsg = packedrecord

应用程序发送此音讯让贰个窗口与贰个热键相关连

当剪贴板的剧情退换时发送此音信给剪贴板观望链的第二个窗口;它同意用剪贴板观察窗口来

WM_MEASUREITEM = 44

WM_INITDIALOG

WM_NCMBUTTONDBLCLK= 169

C B N _ C L O S E UP组合框的列表框被关闭

2个窗口被灭绝

0x0084

WM_RBUTTONUP = 517

滚动条都会发生通告音讯。

//按下某键,并已发出WM_KEYDOWN, WM_KEYUP消息

WM_COPY

此音信布告有个别窗口,非客户区正在销毁

0x0003

WM_DRAWITEM = 43

WM_CANCELMODE

WM_IME_COMPOSITION= 271

WM_INITDIALOG = 272

WM_NCLBUTTONUP =162

//按下鼠标中键

WM_SYSDEADCHAR =263

WM_INPUTLANGCHANGEREQUEST= 80

应用程序发送此消息给多文书档案的客户窗口文告客户窗口激活另1个MDI子窗口,当客户窗口收到

每当打字与印刷处理列队扩展或减弱一条作业时爆发此音信

WM_STYLECHANGED =125

0x007F

音信是指什么?
    
新闻系统对此四个win3二顺序来讲至极人命关天,它是二个程序运行的引力来源。三个音讯,是系统定义的三个33个人的值,他唯1的定义了三个事件,向
Windows发出三个文告,告诉应用程序有些事情时有发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的1个键都会使Windows发送二个新闻给应用程序。
   
音讯小编是当做2个笔录传递给应用程序的,那个记录中富含了音信的品类以及任何音讯。举例,对于单击鼠标所产生的音信的话,那么些记录中带有了单击鼠标时的坐标。那么些记录类型叫做MSG,MSG含有来自windows应用程序音讯队列的音信音讯,它在Windows中宣称如下:

0x00A2

因而剪贴板观察窗口发送此音讯给剪贴板的持有者来呼吁1个CF_OWNE福特ExplorerDISPLAY格式的剪贴板的名字

当2个窗口或应用程序要关门时发送多个非确定性信号

E N _ E Rubicon 奥迪Q5 S PA CE编辑框内部存款和储蓄器不足

发送此新闻公告应用程序的主窗口进度已经脱离了菜单形式循环

WM_QUERYUISTATE =297

WM_SYSTEMERROR = 23

//按下三个键

LBN_ERRSPACE

C B N _ S E L C H AN G E在组合框中挑选了一项

B N _ D O U B L E CL I C K E D //用户双击了按键

一个DDE应用程序(无论是客户还是服务器)提交此新闻来终止3个对话;

自定义窗口类整数消息

WM_ACTIVATE = 6

当光标在窗口的非客户区并双击鼠标右键时发送此音讯

WM_QUERYENDSESSION= 17

0x0015

次第发送此音讯让一个新的大Logo或小Logo与有个别窗口关联;

当用户正在调节窗口大时辰发(Zhong Fa)送此音信给窗口;通过此新闻应用程序能够监视窗口大小和岗位

发送此消息来判别combobox或listbox新扩展的项的绝对地点

二.调动控件尺寸

滚动条都会发出通告新闻。

当2个美食指南将在被激活时发送此新闻,它发出在用户菜单条中的某项或按下有些菜单键,它同意

通告它对话是或不是停止

WM_DROPFILES

音信有哪三种?
   其实,windows中的音信固然大多,但是项目并不散乱,大要上有三种:窗口音信、命令音讯和控件通告音信。
    
窗口信息大致是系统中但是遍布的新闻,它是指由操作系统和决定其余窗口的窗口所运用的新闻。例如CreateWindow、DestroyWindow和MoveWindow等都会激情窗口音讯,还有大家在上边聊到的单击鼠标所发生的音信也是壹种窗口新闻。
    
命令音讯,那是1种新鲜的窗口新闻,他用来管理从2个窗口发送到另3个窗口的用户请求,举例按下二个开关,他就会向主窗口发送一个限令音讯。
    
控件文告音讯,是指那样一种音讯,三个窗口内的子控件产生了部分业务,要求文告父窗口。通告新闻只适用张静规的窗口控件如按键、列表框、组合框、编辑框,以及Windows公共控件如树状视图、列表视图等。比如,单击或双击三个控件、在控件中采取部分文件、操作控件的滚动条都会产生通告信息。她仿佛于命令新闻,当用户与控件窗口交互时,那么控件公告消息就会从控件窗口发送到它的主窗口。但是那种新闻的存在并不是为着管理用户命令,而是为了让主窗口能够转移控件,举例加载、显示数据。举个例子按下二个开关,他向父窗口发送的音讯也得以视作是一个控件文告音信;单击鼠标所发出的音信能够由主窗口一贯管理,然后交到控件窗口管理。
   
在那之中窗口音讯及控件文告新闻至关心重视要由窗口类即直接或直接由CWND类派生类管理。相对窗口新闻及控件文告消息来说,命令消息的管理目的限定就广得多,它不仅仅能够由窗口类管理,还足以由文书档案类,文书档案模板类及使用类所拍卖。
   
由于控件通告音信很首要的,人们用的也正如多,但是实际的意义往往令初专家晕头转向,所以自个儿决定把普及的多少个列出来供我们参考:
按扭控件
BN_CLICKED        用户单击了开关
 BN_DISABLE 开关被明确命令禁止
 BN_DOUBLECLICKED  用户双击了开关
 BN_HILITE  用/户加亮了开关
 BN_PAINT  开关应当重画
 BN_UNHILITE 加亮应当去掉

0x0308

WM_ENABLE = 10

0x0083

WM_NCMBUTTONUP =168

WM_WINDOWPOSCHANGING

WM_NEXTDLGCTL = 40

玖。发送控件鼠标左键被按下的新闻

WM_MOUSEFIRST = 512

0x0222

三个DDE客户程序提交此音讯给二个DDE服务程序来呼吁1个数据项的值;

剪贴板观看窗口发送此新闻给剪贴板全数者以获得CF_OWNECR-VDISPLAY剪贴板格式的名字

WM_VSCROLL = 277

由此选用给定的连锁突显设备的句柄来安装按纽的文件和背景颜色

出殡此信息公告应用程序的主窗口that已退出了菜单循环方式

0x0212

WM_VSCROLLCLIPBOARD= 778

  音信笔者是作为二个笔录传递给应用程序的,那些记录中带有了消息的类型以及别的消息。比如,对于单击鼠标所产生的消息以来,那些记录中蕴藏了单击鼠标时的坐标。那几个记录类型叫做T
M s g,它在Wi n d o w s单元中是这么注解的:

Windows音信大全

WM_HANDHELDLAST =863

WM_INPUTLANGCHANGE= 81

应用程序发送此新闻给MDI客户窗口通告子窗口苏醒到原来大小

time: DWO瑞鹰D / /新闻创设时的时日

0x0002

L B N _ D B L C L K用户双击了1项

程序在呈现前退换菜单

当二个编辑型控件就要被绘制时发送此音讯给它的父窗口;通过响应那条音讯,全体者窗口能够

0x007E

WM_GETMINMAXINFO =36

WM_NCDESTROY

C B N _ E D I T U PD AT E编辑框内的文本将要履新

当TranslateMessage()转发WM_SYSKEYDOWN后发送此音讯给具备键盘主题的窗口

来改造系统调色板

WM_ENABLE = 10

//按下鼠标中键

发送此新闻给那多少个窗口的高低和职位已经被更动时,来调用setwindowpos函数或此外窗口管理函数

WM_NCRBUTTONDOWN =164

WM_EXITMENULOOP

在windows绘制音讯框前发送此音讯给信息框的持有者窗口,通过响应那条消息,全体者窗口能够

WM_KEYUP

WM_IME_CONTROL =643

WM_HOTKEY

E N _ K I L L F O CU S编辑框正在失去输入大旨

绘制静态控件前发送此音讯给它的父窗口,可用来设置静态控件的文件和背景颜色

WM_CTLCOLORDLG =310

当打字与印刷处理列队扩展或调整和收缩一条作业时爆发此音讯

的边框体

WM_GETHOTKEY = 51

WM_MOUSEWHEEL = 522

WM_HANDHELDFIRST =856

澳门新萄京8522 55LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
澳门新萄京8522 56{
澳门新萄京8522 57 int wmId, wmEvent;
澳门新萄京8522 58 PAINTSTRUCT ps;
澳门新萄京8522 59 HDC hdc;
澳门新萄京8522 60 TCHAR szHello[MAX_LOADSTRING];
澳门新萄京8522 61 LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
澳门新萄京8522 62
澳门新萄京8522 63 switch (message) 
澳门新萄京8522 64 {
澳门新萄京8522 65  case WM_COMMAND:
澳门新萄京8522 66         wmId    = LOWORD(wParam); 
澳门新萄京8522 67         wmEvent = HIWORD(wParam); 
澳门新萄京8522 68         // Parse the menu selections:
澳门新萄京8522 69         switch (wmId)
澳门新萄京8522 70         {
澳门新萄京8522 71          case IDM_ABOUT:
澳门新萄京8522 72             DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
澳门新萄京8522 73             break;
澳门新萄京8522 74          case IDM_EXIT:
澳门新萄京8522 75             DestroyWindow(hWnd);
澳门新萄京8522 76             break;
澳门新萄京8522 77          default:
澳门新萄京8522 78             return DefWindowProc(hWnd, message, wParam, lParam);
澳门新萄京8522 79         }
澳门新萄京8522 80   break;
澳门新萄京8522 81
澳门新萄京8522 82  case WM_PAINT:
澳门新萄京8522 83         hdc = BeginPaint(hWnd, &ps);
澳门新萄京8522 84         // TODO: Add any drawing code here澳门新萄京8522 85
澳门新萄京8522 86         RECT rt;
澳门新萄京8522 87         GetClientRect(hWnd, &rt);
澳门新萄京8522 88         DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
澳门新萄京8522 89         EndPaint(hWnd, &ps);
澳门新萄京8522 90         break;
澳门新萄京8522 91
澳门新萄京8522 92  case WM_DESTROY:
澳门新萄京8522 93         PostQuitMessage(0);
澳门新萄京8522 94         break;
澳门新萄京8522 95  default:
澳门新萄京8522 96         return DefWindowProc(hWnd, message, wParam, lParam);
澳门新萄京8522 97  }
澳门新萄京8522 98  return 0;
澳门新萄京8522 99}
澳门新萄京8522 100

E N _ E 大切诺基 CR-V S PA CE编辑框内存不足

当系统的字体财富库变化时发送此信息给持有超级窗口

当窗口垂直滚动条发生1个轮转事件时发送此信息给该窗口和滚动条的主人

3个DDE客户程序提交此音讯给1个DDE服务程序来呼吁服务器每当数据项改成时更新它

WM_NCLBUTTONUP =162

新闻映射的内容
   
通过ClassWizard为大家调换的代码,大家得以看到,新闻映射基本上分为2多数:
   
在头文件(.h)中有多个宏DECLARE_MESSAGE_MAP(),他被放在了类的终极,是二个public属性的;与之对应的是在促成都部队分(.cpp)扩大了一章新闻映射表,内容如下:
    BEGIN_MESSAGE_MAP(当前类, 当前类的基类)
       //{{AFX_MSG_MAP(CMainFrame)
         音讯的入口项
       //}}AFX_MSG_MAP
   END_MESSAGE_MAP()
  
不过仅是那两项还远不足以完结一条新闻,假若一个新闻职业,必须有以下一个部分去同盟:
一.在类的概念中参加相应的函数评释;
2.在类的音讯映射表中参预相应的新闻映射入口项;
3.在类的落到实处中投入相应的函数体;

当四个会话框控件就要被绘制前发送此消息给它的父窗口;通过响应那条音讯,全部者窗口能够

// 移动鼠标

0x0133

WM_HSCROLLCLIPBOARD= 782

当剪贴板包括CF_OWNE冠道DIPLAY格式的数据同时剪贴板观看窗口的客户区要求重画;

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图