十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
标准消息: 除 WM_COMMAND 外, 以 WM 开头所有消息。
成都创新互联主要从事成都网站设计、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务阿里地区,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
非标准消息:以WM_COMMAND 呈现
命令消息 : 由菜单、工具栏按钮、加速键 产生。
通告消息: 由控件产生。
标准消息:CWnd 的派生类都可以接受。
命令消息、通告消息:CCmdTarget派生的类都可以接受.
标准消息不能被 CWinApp 和CDocument 类接受.
Windows的消息系统是由3个部分组成的:
· 消息队列。Windows能够为所有的应用程序维护一个消息队列。应用程序必须从消息队列中获取
消息,然后分派给某个窗口。
· 消息循环。通过这个循环机制应用程序从消息队列中检索消息,再把它分派给适当的窗口,然
后继续从消息队列中检索下一条消息,再分派给适当的窗口,依次进行。
· 窗口过程。每个窗口都有一个窗口过程来接收传递给窗口的消息,它的任务就是获取消息然后
响应它。窗口过程是一个回调函数;处理了一个消息后,它通常要返回一个值给Windows。
注意回调函数是程序中的一种函数,它是由Windows或外部模块调用的。
一个消息从产生到被一个窗口响应,其中有5个步骤:
1) 系统中发生了某个事件。
2) Windows把这个事件翻译为消息,然后把它放到消息队列中。
3) 应用程序从消息队列中接收到这个消息,把它存放在TMsg记录中。
4) 应用程序把消息传递给一个适当的窗口的窗口过程。
5) 窗口过程响应这个消息并进行处理。
步骤3和4构成了应用程序的消息循环。消息循环往往是Windows应用程序的核心,因为消息循环
使一个应用程序能够响应外部的事件。消息循环的任务就是从消息队列中检索消息,然后把消息传递给适当的窗口。如果消息队列中没有消息,Windows就允许其他应用程序处理它们的消息。
Windows操作系统最大的特点就是其图形化的操作界面,其图形化界面是建立在其消息处理机制这个基础之上的。如果不理解Windows消息处理机制,肯定无法深入的理解Windows编程。可惜很多程序员对Windows消息只是略有所闻,对其使用知之甚少,更不了解其内部实现原理,本文试着一步一步向大家披露我理解的Windows消息机制。可以说,掌握了这一部分知识,就是掌握了Windows编程中的神兵利器,灵活运用它,将会极大的提高我们的编程能力。
1 Windows窗口消息大全,全不全自己看
2
3 //////////////////////////////////////////////////////////////////////////
4 #include "AFXPRIV.H"//消息值的定义来源
5 #include "Dde.h"//DDE消息值的定义来源
6 #include "CPL.H"//控制面板消息值的定义来源
7 #include "WFEXT.H"//文件管理器的消息值的定义来源
8 #include "vfw.h"//视频捕捉的消息值的定义来源
9 #include "ras.h"//RAS(远程访问服务)的消息值的定义来源
10 #include "imm.h"//输入法编辑器的消息值的定义来源
11 #include "tspi.h"//消息值的定义来源
12 #include "setupapi.h"//消息值的定义来源
13 //////////////////////////////////////////////////////////////////////////
14 #ifndef WM_SYSTIMER
15 #define WM_SYSTIMER 0x0118 //(caret blink)
16 #endif
17
18 #define DRV_EXITAPPLICATION 0x000C //驱动程序消息相关
19 #define WM_HIBERNATE 0x03FF //WINCE独有的消息(内存资源限制相关)
20
21 //窗口消息解码
22 #define IDSTR(MsgID) MsgID,#MsgID
23
24 typedef struct
25 {
26 DWORD dwMsg;
27 LPCTSTR szMsgText;
28 LPCTSTR szNote;
29 } t_MSGNOTE;
30
31
32 static t_MSGNOTE messagesnote[] =
33 {
34 IDSTR(WM_NULL),"空消息,可检测程序是否有响应等",
35 IDSTR(WM_CREATE),"新建一个窗口",
36 IDSTR(WM_DESTROY),"销毁一个窗口",
37 //IDSTR(0x0004),"",
38 IDSTR(WM_MOVE),"移动一个窗口",
39 IDSTR(WM_SIZE),"改变一个窗口的大小",
40 IDSTR(WM_ACTIVATE),"一个窗口被激活或失去激活状态",
41 IDSTR(WM_SETFOCUS),"将焦点转向一个窗口",
42 IDSTR(WM_KILLFOCUS),"使一个窗口失去焦点",
43 //IDSTR(0x0009),"",
44 IDSTR(WM_ENABLE),"使一个窗口处于可用状态",
45 IDSTR(WM_SETREDRAW),"设置窗口是否能重绘",
46 IDSTR(WM_SETTEXT),"设置一个窗口的文本",
47 IDSTR(WM_GETTEXT),"复制窗口的文本到缓冲区",
48 IDSTR(WM_GETTEXTLENGTH),"得到窗口的文本长度(不含结束符)",
49 IDSTR(WM_PAINT),"窗口重绘",
50 IDSTR(WM_CLOSE),"用户关闭窗口时会发送本消息,紧接着会发送WM_DESTROY消息",
51 IDSTR(WM_QUERYENDSESSION),"关机或注销时系统会按优先级给各进程发送WM_QUERYENDSESSION,告诉应用程序要关机或注销了",
52 IDSTR(WM_QUIT),"关闭消息循环结束程序的运行",
53 IDSTR(WM_QUERYOPEN),"最小化的窗口即将被恢复以前的大小位置",
54 IDSTR(WM_ERASEBKGND),"当一个窗口的背景必须被擦除时本消息会被触发(如:窗口大小改变时)",
55 IDSTR(WM_SYSCOLORCHANGE),"当系统颜色改变时,发送本消息给所有顶级窗口",
56 IDSTR(WM_ENDSESSION),"关机或注销时系统会发出WM_QUERYENDSESSION消息,然后将本消息发送给应用程序,通知程序会话结束",
57 //IDSTR(0x0017),"",
58 IDSTR(WM_SHOWWINDOW),"发送本消息给一个窗口,以便隐藏或显示该窗口",
59 //IDSTR(0x0019),"",
60 IDSTR(WM_WININICHANGE),"读写\"win.ini\"时会发送本消息给所有顶层窗口,通知其它进程该文件已被更改",
61 IDSTR(WM_DEVMODECHANGE),"改变设备模式设置(\"win.ini\")时,处理本消息的应用程序可重新初始化它们的设备模式设置",
62 IDSTR(WM_ACTIVATEAPP),"窗口进程激活状态改动,正被激活的窗口属于不同的应用程序 ",//??
63 IDSTR(WM_FONTCHANGE),"当系统的字体资源库变化时发送本消息给所有顶级窗口",
64 IDSTR(WM_TIMECHANGE),"当系统的时间变化时发送本消息给所有顶级窗口",
65 IDSTR(WM_CANCELMODE),"发送本消息来取消某种正在进行的模态(操作)(如鼠示捕获),例如:启动一个模态窗口时,父窗会收到本消息;该消息无参数",
66 IDSTR(WM_SETCURSOR),"若鼠标光标在某窗口内移动且鼠标没被捕获时,就会发送本消息给某个窗口",
67 IDSTR(WM_MOUSEACTIVATE),"当鼠标光标在某个未激活窗口内,而用户正按着鼠标的某个键时,会发送本消息给当前窗口",
68 IDSTR(WM_CHILDACTIVATE),"点击窗口标题栏或当窗口被激活、移动、大小改变时,会发送本消息给MDI子窗口",
69 IDSTR(WM_QUEUESYNC),"本消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的HOOK程序分离出用户输入消息",
70 IDSTR(WM_GETMINMAXINFO),"当窗口将要改变大小或位置时,由系统发送本消息给窗口,用户拖动一个可重置大小的窗口时便会发出本消息",
71 //IDSTR(0x0025),"",
72 IDSTR(WM_PAINTICON),"当一个最小化的窗口图标将被重绘时发送本消息",
73 IDSTR(WM_ICONERASEBKGND),"本消息发送给某个最小化的窗口,仅当它在画图标前它的背景必须被重画",
74 IDSTR(WM_NEXTDLGCTL),"发送本消息给一个对话框程序窗口过程,以便在各控件间设置键盘焦点位置",
75 //IDSTR(0x0029),"",
76 IDSTR(WM_SPOOLERSTATUS),"每当打印管理列队增加或减少一条作业时就会发出本消息",
77 IDSTR(WM_DRAWITEM),"按钮、组合框、列表框、菜单的外观改变时会发送本消息给这些控件的所有者",
78 IDSTR(WM_MEASUREITEM),"按钮、组合框、列表框、列表控件、菜单项被创建时会发送本消息给这些控件的所有者",
79 IDSTR(WM_DELETEITEM),"当列表框或组合框被销毁或通过LB_DELETESTRING、LB_RESETCONTENT、CB_DELETESTRING或CB_RESETCONTENT消息删除某些项时,会发送本消息给这些控件的所有者",
80 IDSTR(WM_VKEYTOITEM),"LBS_WANTKEYBOARDINPUT风格的列表框会发出本消息给其所有者,以便响应WM_KEYDOWN消息",
81 IDSTR(WM_CHARTOITEM),"LBS_WANTKEYBOARDINPUT风格的列表框会发送本消息给其所有者,以便响应WM_CHAR消息",
82 IDSTR(WM_SETFONT),"指定控件所用字体",
83 IDSTR(WM_GETFONT),"得到当前控件绘制其文本所用的字体",
84 IDSTR(WM_SETHOTKEY),"为某窗口关联一个热键",
85 IDSTR(WM_GETHOTKEY),"确定某热键与某窗口是否相关联",
86 //IDSTR(0x0034),"",
87 //IDSTR(0x0035),"",
88 //IDSTR(0x0036),"",
89 IDSTR(WM_QUERYDRAGICON),"本消息发送给最小化的窗口(iconic),当该窗口将被拖放而其窗口类中没有定义图标,应用程序能返回一个图标或光标的句柄。当用户拖放图标时系统会显示这个图标或光标",
90 //IDSTR(0x0038),"",
91 IDSTR(WM_COMPAREITEM),"可发送本消息来确定组合框(CBS_SORT)或列表框(LBS_SORT)中新增项的相对位置",
92 //IDSTR(0x003A),"",
93 //IDSTR(0x003B),"",
94 //IDSTR(0x003C),"",
95 IDSTR(WM_GETOBJECT),"\"oleacc.dll\"(COM组件)(Microsoft Active Accessibility:方便残疾人使用电脑的一种技术)发送本消息激活服务程序以便获取它所包含的关联对象的信息",
96 //IDSTR(0x003E),"",
97 //IDSTR(0x003F),"",
98 //IDSTR(0x0040),"",
99 IDSTR(WM_COMPACTING),"显示内存已经很少了",
100 //IDSTR(0x0042),"",
101 //IDSTR(0x0043),"",
102 IDSTR(WM_COMMNOTIFY),"Win3.1中,当串口事件产生时,通讯设备驱动程序发送消息本消息给系统,指示输入输出队列的状态",
103 //IDSTR(0x0045),"",
104 IDSTR(WM_WINDOWPOSCHANGING),"本消息会发送给那些大小和位置(Z_Order)将被改变的窗口,以调用SetWindowPos函数或其它窗口管理函数",
105 IDSTR(WM_WINDOWPOSCHANGED),"本消息会发送给那些大小和位置(Z_Order)已被改变的窗口,以调用SetWindowPos函数或其它窗口管理函数",
106 IDSTR(WM_POWER),"当系统将要进入暂停状态时发送本消息(适用于16位的windows)",
107 //IDSTR(0x0049),"",
108 IDSTR(WM_COPYDATA),"当一个应用程序传递数据给另一个应用程序时发送本消息",
109 IDSTR(WM_CANCELJOURNAL),"当用户取消程序日志激活状态时,发送本消息给那个应用程序。该消息使用空窗口句柄发送",
110 //IDSTR(0x004C),"",
111 //IDSTR(0x004D),"",
112 IDSTR(WM_NOTIFY),"当某控件的某事件已发生或该控件需得到一些信息时,发送本消息给其父窗",
113 //IDSTR(0x004F),"",
114 IDSTR(WM_INPUTLANGCHANGEREQUEST),"当用户通过过单击任务栏上的语言指示符或某快捷键组合选择改变输入法时系统会向焦点窗口发送本消息",
115 IDSTR(WM_INPUTLANGCHANGE),"切换输入法后,系统会发送本消息给受影响的顶层窗口",
116 IDSTR(WM_TCARD),"程序已初始化windows帮助例程时会发送本消息给应用程序",
117 IDSTR(WM_HELP),"按下F1后,若某菜单是激活的,就发送本消息给此窗口关联的菜单;否则就发送给有焦点的窗口;若当前都没有焦点,就把本消息发送给当前激活的窗口",
118 IDSTR(WM_USERCHANGED),"当用户已登入或退出后发送本消息给所有窗口;当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送本消息",
119 IDSTR(WM_NOTIFYFORMAT),"公用控件、自定义控件和其父窗通过本消息判断控件在WM_NOTIFY通知消息中是使用ANSI还是UNICODE,使用本消息能使某个控件与它的父控件间进行相互通信",
120 IDSTR(WM_CONTEXTMENU),"当用户在某窗口中点击右键就发送本消息给该窗口,设置右键菜单",
121 IDSTR(WM_STYLECHANGING),"当调用SetWindowLong函数将要改变一个或多个窗口的风格时,发送本消息给那个窗口",
122 IDSTR(WM_STYLECHANGED),"当调用SetWindowLong函数改变一个或多个窗口的风格后,发送本消息给那个窗口",
123 IDSTR(WM_DISPLAYCHANGE),"当显示器的分辨率改变后,发送本消息给所有窗口",
124 IDSTR(WM_GETICON),"本消息发送给某个窗口,用于返回与某窗口有关联的大图标或小图标的句柄",
125 IDSTR(WM_SETICON),"应用程序发送本消息让一个新的大图标或小图标与某窗口相关联",
126 IDSTR(WM_NCCREATE),"当某窗口首次被创建时,本消息在WM_CREATE消息发送前发送",
127 IDSTR(WM_NCDESTROY),"本消息通知某窗口,非客户区正在销毁",
128 IDSTR(WM_NCCALCSIZE),"当某窗口的客户区的大小和位置须被计算时发送本消息",
129 IDSTR(WM_NCHITTEST),"当用户在在非客户区移动鼠标、按住或释放鼠标时发送本消息(击中测试);若鼠标没有被捕获,则本消息在窗口得到光标之后发出,否则消息发送到捕获到鼠标的窗口",
130 IDSTR(WM_NCPAINT),"当窗口框架(非客户区)必须被被重绘时,应用程序发送本消息给该窗口",
131 IDSTR(WM_NCACTIVATE),"本消息发送给某窗口,在窗口的非客户区被激活时重绘窗口",
132 IDSTR(WM_GETDLGCODE),"发送本消息给某个与对话框程序关联的控件,系统控制方位键和TAB键使输入进入该控件,通过响应本消息应用程序可把它当成一个特殊的输入控件并能处理它",
133 IDSTR(WM_SYNCPAINT),"当避免联系独立的GUI线程时,本消息用于同步刷新,本消息由系统确定是否发送",
134 IDSTR(WM_NCMOUSEMOVE),"当光标在某窗口的非客户区内移动时,发送本消息给该窗口",
135 IDSTR(WM_NCLBUTTONDOWN),"当光标在某窗口的非客户区内的同时按下鼠标左键,会发送本消息",
136 IDSTR(WM_NCLBUTTONUP),"当用户释放鼠标左键的同时光标在某窗口的非客户区内时,会发送本消息",
137 IDSTR(WM_NCLBUTTONDBLCLK),"当用户双击鼠标左键的同时光标在某窗口的非客户区内时,会发送本消息",
138 IDSTR(WM_NCRBUTTONDOWN),"当用户按下鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息",
139 IDSTR(WM_NCRBUTTONUP),"当用户释放鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息",
140 IDSTR(WM_NCRBUTTONDBLCLK),"当用户双击鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息",
141 IDSTR(WM_NCMBUTTONDOWN),"当用户按下鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息",
142 IDSTR(WM_NCMBUTTONUP),"当用户释放鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息",
143 IDSTR(WM_NCMBUTTONDBLCLK),"当用户双击鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息",
144
145 //滚动条消息
146 IDSTR(SBM_SETPOS),"设置滚动条上滑块的位置",
147 IDSTR(SBM_GETPOS),"获取滚动条上滑块的位置",
148 IDSTR(SBM_SETRANGE),"设置滚动条的最大与最小位置值",
149 IDSTR(SBM_SETRANGEREDRAW),"设置滚动条的最大与最小位置值,并重绘滚动条",
150 IDSTR(SBM_GETRANGE),"获取滚动条的最大与最小位置值",
151 IDSTR(SBM_ENABLE_ARROWS),"设置滚动条的最大与最小位置值,并重绘滚动条",
152 IDSTR(SBM_SETSCROLLINFO),"设置滚动条的参数,本消息通过SCROLLINFO结构指定多种参数,具体指定哪些参数由结构中的fMask成员确定",
153 IDSTR(SBM_GETSCROLLINFO),"获取滚动条的参数,发送本消息后,将在SCROLLINFO结构中返回控件的多种参数,当然须事先设定结构的fMask成员以确定具体要取得哪些参数",
154
155 //按钮控件消息
156 IDSTR(BM_GETCHECK),"获取单选按钮或复选框的状态",
157 IDSTR(BM_SETCHECK),"设置单选按钮或复选框的状态",
158 IDSTR(BM_GETSTATE),"确定单选按钮或复选框的状态",
159 IDSTR(BM_SETSTATE),"改变按钮的高亮状态",
160 IDSTR(BM_SETSTYLE),"改变按钮的风格",
161 IDSTR(BM_CLICK),"模拟用户点击按钮",
162 IDSTR(BM_GETIMAGE),"获取与按钮相关联的图片句柄(图标或位图)",
163 IDSTR(BM_SETIMAGE),"把按钮与某张图片相关联(图标或位图),注:按钮须有BS_ICON风格",
164
165 //按钮控件通知消息
166 IDSTR(BN_CLICKED),"用户单击了按钮,父窗通过WM_COMMAND来接收本通知消息",
167 IDSTR(BN_DBLCLK),"用户双击了按钮(BS_OWNERDRAW或BS_RADIOBUTTON风格),父窗通过WM_COMMAND来接收本通知消息",
168 IDSTR(BN_DISABLE),"按钮被禁止,父窗通过WM_COMMAND来接收本通知消息",
169 IDSTR(BN_DOUBLECLICKED),"用户双击了按钮(与BN_DBLCLK同)(BS_OWNERDRAW或BS_RADIOBUTTON风格),父窗通过WM_COMMAND来接收本通知消息",
170 IDSTR(BN_HILITE),"用户选择(即加亮)了按钮(与BN_PUSHED相同),父窗通过WM_COMMAND来接收本通知消息",
171 IDSTR(BN_KILLFOCUS),"按钮失去了键盘焦点(按钮须有BS_NOTIFY风格才能发送本消息),父窗通过WM_COMMAND来接收本通知消息",
172 IDSTR(BN_PAINT),"按钮应当重绘,父窗通过WM_COMMAND来接收本通知消息",
173 IDSTR(BN_PUSHED),"用户加亮了按钮(与BN_HILITE相同),父窗通过WM_COMMAND来接收本通知消息",
174 IDSTR(BN_SETFOCUS),"按钮收到键盘焦点(按钮须有BS_NOTIFY风格才能发送本消息),父窗通过WM_COMMAND息来接收本通知消息",
175 IDSTR(BN_UNHILITE),"按钮的加亮应当去掉(与BN_UNPUSHED相同),父窗通过WM_COMMAND来接收本通知消息",
176 IDSTR(BN_UNPUSHED),"按钮的加亮应当去掉(与BN_UNHILITE相同),父窗通过WM_COMMAND来接收本通知消息",