Windows消息大全
我在实际编程中越来越感到消息的相应在我们的程序中是一个非常重要的部分,有一些普通的消息我们可以在ClassWizard的添加其相应函数,但就算我们能找到一些消息但有的时候也不知道是什么意思,相应他有什么用,还有一些特殊的消息是在ClassWizard里没有的,只有有丰富经验的才知道,这对我们操作程序带来很大不便,所以我在此提议各位朋友把自己知道的消息以及参数还有VC里默认的相应函数列举出来,尽自己的努力帮助大家了解windows的消息,也帮助自己
在此我先抛砖引玉:
消息 MSG_MAP 相应函数作用
WM_LBUTTONDOWN ON_WM_LBUTTONDOWN() OnLButtonDown(UINT nFlags, CPoint point) 相应鼠标左健单击
WM_ERASEBKGND ON_MESSAGE(WM_ERASEBKGND, OnEraseBkgnd) OnEraseBkgnd(CDC *pDC) 当背景重画时相应
回复人: xiaoxieyu(小鱼) ( ) 信誉:100 2002-5-28 14:09:37 得分:90
WINDOWS消息说明
消息,就是指Wi n d o w s发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变
窗口尺寸、按下键盘上的一个键都会使Wi n d o w s发送一个消息给应用程序。
消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,
对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做T M s g,它
在Wi n d o w s单元中是这样声明的:
t y p e
TMsg = packed record
hwnd: HWND; / /窗口句柄
message: UINT; / /消息常量标识符
wParam: WPA R A M ; // 32位消息的特定附加信息
lParam: LPA R A M ; // 32位消息的特定附加信息
time: DWORD; / /消息创建时的时间
pt: TPoint; / /消息创建时的鼠标位置
e n d ;
消息中有什么?
是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:hwnd 32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可
视对象的句柄(窗口、对话框、按钮、编辑框等)。
message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也
可以是自定义的常量。
wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。
lParam 通常是一个指向内存中数据的指针。由于W P a r a m、l P a r a m和P o i n t e r都是3 2位的,
因此,它们之间可以相互转换。
WM_NULL = $0000;
WM_CREATE = $0001;
应用程序创建一个窗口
WM_DESTROY = $0002;
一个窗口被销毁
WM_MOVE = $0003;
移动一个窗口
WM_SIZE = $0005;
改变一个窗口的大小
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子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小
WM_QUEUESYNC = $0023;
此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序
分离出用户输入消息
WM_GETMINMAXINFO = $0024;
此消息发送给窗口当它将要改变大小或位置;
WM_PAINTICON = $0026;
发送给最小化窗口当它图标将要被重画
WM_ICONERASEBKGND = $0027;
此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画
WM_NEXTDLGCTL = $0028;
发送此消息给一个对话框程序去更改焦点位置
WM_SPOOLERSTATUS = $002A;
每当打印管理列队增加或减少一条作业时发出此消息
WM_DRAWITEM = $002B;
当button,combobox,listbox,menu的可视外观改变时发送
此消息给这些空件的所有者
WM_MEASUREITEM = $002C;
当button, combo box, list box, list view control, or menu item 被创建时
发送此消息给控件的所有者
WM_DELETEITEM = $002D;
当the list box 或 combo box 被销毁或当某些项被删除通过LB_DELETESTRING, LB_R ESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT 消息
WM_VKEYTOITEM = $002E;
此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息
WM_CHARTOITEM = $002F;
此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息
WM_SETFONT = $0030;
当绘制文本时程序发送此消息得到控件要用的颜色
WM_GETFONT = $0031;
应用程序发送此消息得到当前控件绘制文本的字体
WM_SETHOTKEY = $0032;
应用程序发送此消息让一个窗口与一个热键相关连
WM_GETHOTKEY = $0033;
应用程序发送此消息来判断热键与某个窗口是否有关联
WM_QUERYDRAGICON = $0037;
此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能
返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标
WM_COMPAREITEM = $0039;
发送此消息来判定combobox或listbox新增加的项的相对位置
WM_GETOBJECT = $003D;
WM_COMPACTING = $0041;
显示内存已经很少了
WM_WINDOWPOSCHANGING = $0046;
发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数
WM_WINDOWPOSCHANGED = $0047;
发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数
WM_POWER = $0048;(适用于16位的windows)
当系统将要进入暂停状态时发送此消息
WM_COPYDATA = $004A;
当一个应用程序传递数据给另一个应用程序时发送此消息
WM_CANCELJOURNAL = $004B;
当某个用户取消程序日志激活状态,提交此消息给程序
WM_NOTIFY = $004E;
当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口
WM_INPUTLANGCHANGEREQUEST = $0050;
当用户选择某种输入语言,或输入语言的热键改变
WM_INPUTLANGCHANGE = $0051;
当平台现场已经被改变后发送此消息给受影响的最顶级窗口
当程序已经初始化windows帮助例程时发送此消息给应用程序
WM_HELP = $0053;
此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,
否则就
发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口
WM_USERCHANGED = $0054;
当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的
具体
设置信息,在用户更新设置时系统马上发送此消息;
WM_NOTIFYFORMAT = $0055;
公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构在WM_NOTIFY消息,使用此控件能使某个控件与它的父控件之间进行相互通信
WM_CONTEXTMENU = $007B;
当用户某个窗口中点击了一下右键就发送此消息给这个窗口
WM_STYLECHANGING = $007C;
当调用SETWINDOWLONG函数将要改变一个或多个窗口的风格时发送此消息给那个窗口
WM_STYLECHANGED = $007D;
当调用SETWINDOWLONG函数一个或多个窗口的风格后发送此消息给那个窗口
WM_DISPLAYCHANGE = $007E;
当显示器的分辨率改变后发送此消息给所有的窗口
WM_GETICON = $007F;
此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄;
WM_SETICON = $0080;
程序发送此消息让一个新的大图标或小图标与某个窗口关联;
WM_NCCREATE = $0081;
当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送;
WM_NCDESTROY = $0082;
此消息通知某个窗口,非客户区正在销毁
WM_NCCALCSIZE = $0083;
当某个窗口的客户区域必须被核算时发送此消息
WM_NCHITTEST = $0084;//移动鼠标,按住或释放鼠标时发生
程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时;
WM_NCACTIVATE = $0086;
此消息发送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态;
WM_GETDLGCODE = $0087;
发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件
通过响应WM_GETDLGCODE消息,应用程序可以把他当成一个特殊的输入控件并能处理它
WM_NCMOUSEMOVE = $00A0;
当光标在一个窗口的非客户区内移动时发送此消息给这个窗口 file://非客户区为:窗体的标题栏及窗
Top
回复人: lant(蓝特) ( ) 信誉:100 2002-5-28 14:10:06 得分:10
VC++技术内幕(第四版)后边的附录A里就有MFC的所有消息。
Top
回复人: tianlinyi(笨蛋) ( ) 信誉:97 2002-5-28 14:11:02 得分:0
楼主好主意:)
Top
回复人: tianlinyi(笨蛋) ( ) 信誉:97 2002-5-28 14:11:33 得分:0
楼主好主意:)
Top
回复人: xiaoxieyu(小鱼) ( ) 信誉:100 2002-5-28 14:12:40 得分:10
WM_SYSKEYDOWN = $0104;
当用户按住ALT键同时按下其它键时提交此消息给拥有焦点的窗口;
WM_SYSKEYUP = $0105;
当用户释放一个键同时ALT 键还按着时提交此消息给拥有焦点的窗口
WM_SYSCHAR = $0106;
当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后提交此消息给拥有焦点的窗口
WM_SYSDEADCHAR = $0107;
当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后发送此消息给拥有焦点的窗口
WM_KEYLAST = $0108;
WM_INITDIALOG = $0110;
在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务
WM_COMMAND = $0111;
当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译
WM_SYSCOMMAND = $0112;
当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息
WM_TIMER = $0113; file://发生了定时器事件
WM_HSCROLL = $0114;
当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件
WM_VSCROLL = $0115;
当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件 WM_INITMENU = $0116;
当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许
程序在显示前更改菜单
WM_INITMENUPOPUP = $0117;
当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要
改变全部
WM_MENUSELECT = $011F;
当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)
WM_MENUCHAR = $0120;
当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者;
WM_ENTERIDLE = $0121;
当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待
WM_MENURBUTTONUP = $0122;
WM_MENUGETOBJECT = $0124;
WM_UNINITMENUPOPUP = $0125;
WM_MENUCOMMAND = $0126;
WM_CHANGEUISTATE = $0127;
WM_UPDATEUISTATE = $0128;
WM_QUERYUISTATE = $0129;
WM_CTLCOLORMSGBOX = $0132;
在windows绘制消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色
WM_CTLCOLOREDIT = $0133;
当一个编辑型控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色
WM_CTLCOLORLISTBOX = $0134;
当一个列表框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色
WM_CTLCOLORBTN = $0135;
当一个按钮控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色
WM_CTLCOLORDLG = $0136;
当一个对话框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色
WM_CTLCOLORSCROLLBAR= $0137;
当一个滚动条控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色
WM_CTLCOLORSTATIC = $0138;
当一个静态控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以
通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色
WM_MOUSEFIRST = $0200;
WM_MOUSEMOVE = $0200;
// 移动鼠标
WM_LBUTTONDOWN = $0201;
file://按下鼠标左键
WM_LBUTTONUP = $0202;
file://释放鼠标左键
WM_LBUTTONDBLCLK = $0203;
file://双击鼠标左键
file://按下鼠标右键
WM_RBUTTONUP = $0205;
file://释放鼠标右键
WM_RBUTTONDBLCLK = $0206;
file://双击鼠标右键
WM_MBUTTONDOWN = $0207;
file://按下鼠标中键
WM_MBUTTONUP = $0208;
file://释放鼠标中键
WM_MBUTTONDBLCLK = $0209;
file://双击鼠标中键
WM_MOUSEWHEEL = $020A;
当鼠标轮子转动时发送此消息个当前有焦点的控件
WM_MOUSELAST = $020A;
WM_PARENTNOTIFY = $0210;
当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时发送此消息给它的父窗口
WM_ENTERMENULOOP = $0211;
发送此消息通知应用程序的主窗口that已经进入了菜单循环模式
WM_EXITMENULOOP = $0212;
发送此消息通知应用程序的主窗口that已退出了菜单循环模式
WM_NEXTMENU = $0213;
WM_SIZING = 532;
当用户正在调整窗口大小时发送此消息给窗口;通过此消息应用程序可以监视窗口大小和位置
也可以修改他们
WM_CAPTURECHANGED = 533;
发送此消息给窗口当它失去捕获的鼠标时;
WM_MOVING = 534;
当用户在移动窗口时发送此消息,通过此消息应用程序可以监视窗口大小和位置
也可以修改他们;
WM_POWERBROADCAST = 536;
此消息发送给应用程序来通知它有关电源管理事件;
WM_DEVICECHANGE = 537;
当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序
WM_IME_STARTCOMPOSITION = $010D;
WM_IME_ENDCOMPOSITION = $010E;
WM_IME_COMPOSITION = $010F;
WM_IME_KEYLAST = $010F;
WM_IME_SETCONTEXT = $0281;
WM_IME_NOTIFY = $0282;
WM_IME_CONTROL = $0283;
WM_IME_COMPOSITIONFULL = $0284;
WM_IME_SELECT = $0285;
WM_IME_CHAR = $0286;
WM_IME_REQUEST = $0288;
WM_IME_KEYDOWN = $0290;
WM_IME_KEYUP = $0291;
WM_MDICREATE = $0220;
应用程序发送此消息给多文档的客户窗口来创建一个MDI 子窗口
WM_MDIDESTROY = $0221;
应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口
WM_MDIACTIVATE = $0222;
应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到
此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)激活它;
WM_MDIRESTORE = $0223;
程序发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小
WM_MDINEXT = $0224;
程序发送此消息给MDI客户窗口激活下一个或前一个窗口
WM_MDIMAXIMIZE = $0225;
程序发送此消息给MDI客户窗口来最大化一个MDI子窗口;
WM_MDITILE = $0226;
程序发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口
WM_MDICASCADE = $0227;
程序发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口
WM_MDIICONARRANGE = $0228;
程序发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口
WM_MDIGETACTIVE = $0229;
程序发送此消息给MDI客户窗口来找到激活的子窗口的句柄
WM_MDISETMENU = $0230;
程序发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单
WM_ENTERSIZEMOVE = $0231;
WM_EXITSIZEMOVE = $0232;
WM_DROPFILES = $0233;
WM_MDIREFRESHMENU = $0234;
WM_MOUSEHOVER = $02A1;
WM_MOUSELEAVE = $02A3;
WM_CUT = $0300;
程序发送此消息给一个编辑框或combobox来删除当前选择的文本
WM_COPY = $0301;
程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板
WM_PASTE = $0302;
程序发送此消息给editcontrol或combobox从剪贴板中得到数据
WM_CLEAR = $0303;
程序发送此消息给editcontrol或combobox清除当前选择的内容;
WM_UNDO = $0304;
程序发送此消息给editcontrol或combobox撤消最后一次操作
WM_RENDERFORMAT = $0305;
WM_RENDERALLFORMATS = $0306;
WM_DESTROYCLIPBOARD = $0307;
当调用ENPTYCLIPBOARD函数时发送此消息给剪贴板的所有者
WM_DRAWCLIPBOARD = $0308;
当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口;它允许用剪贴板观察窗口来
显示剪贴板的新内容;
WM_PAINTCLIPBOARD = $0309;
当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画;
WM_VSCROLLCLIPBOARD = $030A;
WM_SIZECLIPBOARD = $030B;
当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者;
WM_ASKCBFORMATNAME = $030C;
通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字
WM_CHANGECBCHAIN = $030D;
当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口;
WM_HSCROLLCLIPBOARD = $030E;
此消息通过一个剪贴
Top
回复人: xiaoxieyu(小鱼) ( ) 信誉:100 2002-5-28 14:13:25 得分:10
WM_PRINTCLIENT = 792;
WM_HANDHELDFIRST = 856;
WM_HANDHELDLAST = 863;
WM_PENWINFIRST = $0380;
WM_PENWINLAST = $038F;
WM_COALESCE_FIRST = $0390;
WM_COALESCE_LAST = $039F;
WM_DDE_FIRST = $03E0;
WM_DDE_INITIATE = WM_DDE_FIRST + 0;
一个DDE客户程序提交此消息开始一个与服务器程序的会话来响应那个指定的程序和主题名;
WM_DDE_TERMINATE = WM_DDE_FIRST + 1;
一个DDE应用程序(无论是客户还是服务器)提交此消息来终止一个会话;
WM_DDE_ADVISE = WM_DDE_FIRST + 2;
一个DDE客户程序提交此消息给一个DDE服务程序来请求服务器每当数据项改变时更新它
WM_DDE_UNADVISE = WM_DDE_FIRST + 3;
一个DDE客户程序通过此消息通知一个DDE服务程序不更新指定的项或一个特殊的剪贴板格式的项
WM_DDE_ACK = WM_DDE_FIRST + 4;
此消息通知一个DDE(动态数据交换)程序已收到并正在处理WM_DDE_POKE, WM_DDE_EXECU TE, WM_DDE_DATA, WM_DDE_ADVISE, WM_DDE_UNADVISE, or WM_DDE_INITIAT消息
WM_DDE_DATA = WM_DDE_FIRST + 5;
一个DDE服务程序提交此消息给DDE客户程序来传递个一数据项给客户或通知客户的一条可用数据项
WM_DDE_REQUEST = WM_DDE_FIRST + 6;
一个DDE客户程序提交此消息给一个DDE服务程序来请求一个数据项的值;
WM_DDE_POKE = WM_DDE_FIRST + 7;
一个DDE客户程序提交此消息给一个DDE服务程序,客户使用此消息来请求服务器接收一个未经同意的数据项;服务器通过答复WM_DDE_ACK消息提示是否它接收这个数据项;
WM_DDE_EXECUTE = WM_DDE_FIRST + 8;
一个DDE客户程序提交此消息给一个DDE服务程序来发送一个字符串给服务器让它象串行命令一样被处理,服务器通过提交WM_DDE_ACK消息来作回应;
WM_DDE_LAST = WM_DDE_FIRST + 8;
WM_APP = $8000;
WM_USER = $0400;
此消息能帮助应用程序自定义私有消息;
/////////////////////////////////////////////////////////////////////
通知消息(Notification message)是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通
知父窗口。通知消息只适用于标准的窗口控件如按钮、列表框、组合框、编辑框,以及Wi ndows 95公
共控件如树状视图、列表视图等。例如,单击或双击一个控件、在控件中选择部分文本、操作控件的
滚动条都会产生通知消息。
按扭
B N _
C L I C K E
D file://用户单击了按钮
B N _ D I S A B L E file://按钮被禁止
B N _ D O U B L E
C L I C K E
D file://用户双击了按钮
B N _ H I L I T E file://用户加亮了按钮
B N _ PA I N T按钮应当重画
B N _ U N H I L I T E加亮应当去掉
组合框
C B N _ C L O S E U P组合框的列表框被关闭
C B N _
D B L C L K用户双击了一个字符串
C B N _
D R O P D O W N组合框的列表框被拉出
C B N _ E
D I T C H A N G E用户修改了编辑框中的文本
C B N _ E
D I T U P D AT E编辑框内的文本即将更新
C B N _ E R R S PA C E组合框内存不足
C B N _ K I L L F O C U S组合框失去输入焦点
C B N _ S E L C H A N G E在组合框中选择了一项
C B N _ S E L E N
D C A N C
E L用户的选择应当被取消
C B N _ S E L E N
D O K用户的选择是合法的
C B N _ S E T F O C U S组合框获得输入焦点
编辑框
E N _ C H A N G E编辑框中的文本己更新
E N _ E R R S PA C E编辑框内存不足
E N _ H S C R O L L用户点击了水平滚动条
E N _ K I L L
F O C U S编辑框正在失去输入焦点
E N _ M A X T E X T插入的内容被截断
E N _ S E T
F O C U S编辑框获得输入焦点
E N _ U P D AT E编辑框中的文本将要更新
E N _ V S C R O L L用户点击了垂直滚动条消息含义
列表框
L B N _ D B L C L K用户双击了一项
L B N _ E R R S PA C E列表框内存不够
L B N _ K I L L F O C U S列表框正在失去输入焦点
L B N _ S E L C A N C E L选择被取消
L B N _ S E L C H A N G E选择了另一项
L B N _ S E T F O C U S列表框获得输入焦点
Top
回复人: smlstar(茂材茂才茂财) ( ) 信誉:100 2002-5-28 14:24:50 得分:0
good!
Top
回复人: delphihero(阿蒙(C++)) ( ) 信誉:97 2002-5-28 14:24:59 得分:30
没用的你要使用才能清除的了解
消息 MSG_MAP 相应函数作用
WM_LBUTTONDOWN ON_WM_LBUTTONDOWN() OnLButtonDown(UINT nFlags, CPoint point)
后面的函数是可以变得,你看了深入浅出mfc就知道,是用宏来把出处理消息的函数和消息连接在一起。在 https://www.doczj.com/doc/de10968458.html, 中很多函数名字有了变化,和vc6 中有点不同了。如果你想看消息
windows.h 文件中声明了所有的消息
Top
回复人: tpmao(tpmao) ( ) 信誉:100 2002-5-28 14:38:32 得分:0
看君一篇文,胜读一年书
Top
回复人: kuhx(菜菜儿) ( ) 信誉:100 2002-5-28 15:08:18 得分:0
kuhx
Top
回复人: scxy(小熊) ( ) 信誉:94 2002-5-28 15:08:32 得分:0
请大家继续添加自己所知道,我将在空闲时间整理这个帖子为FAQ,
Top
回复人: johnsunwg(落差) ( ) 信誉:100 2002-5-28 15:11:25 得分:0
好同志!
Top
回复人: Kklee(因为梦,我有远方) ( ) 信誉:100 2002-5-28 15:14:48 得分:0
好东东,给我发一份
Top
回复人: ju_feng(NorthSky) ( ) 信誉:105 2002-5-28 15:17:38 得分:20
WM_COPY_DATA 数据传送消息
Top
回复人: smartdraw(修炼) ( ) 信誉:97 2002-5-28 15:37:49 得分:0
■■
send to me
yyhyan@https://www.doczj.com/doc/de10968458.html,
■■
Top
回复人: scxy(小熊) ( ) 信誉:94 2002-5-28 15:58:45 得分:0
这是我从visual c++上COPY来的消息函数
Appendix A
Message Map Functions in the Microsoft Foundation Class Library
HANDLERS FOR WM_COMMAND MESSAGES
Map Entry Function Prototype
ON_COMMAND(
ON_COMMAND_EX(
ON_COMMAND_EX_RANGE(
ON_UPDATE_COMMAND_UI(
ON_UPDATE_COMMAND_UI_RANGE (
n(CCmdUI*);
ON_UPDATE_COMMAND_UI_REFLECT (
HANDLERS FOR CHILD WINDOW NOTIFICATION MESSAGES
Map Entry Function Prototype
Generic Control Notification Codes
ON_CONTROL(
ON_CONTROL_RANGE(
ON_CONTROL_REFLECT(
ON_CONTROL_REFLECT_EX(
ON_NOTIFY(
ON_NOTIFY_EX(
ON_NOTIFY_EX_RANGE(
ON_NOTIFY_RANGE(
ON_NOTIFY_REFLECT(
ON_NOTIFY_REFLECT_EX(
User Button Notification Codes
ON_BN_CLICKED(
ON_BN_DOUBLECLICKED(
ON_BN_KILLFOCUS(
ON_BN_SETFOCUS(
Combo Box Notification Codes
ON_CBN_CLOSEUP(
ON_CBN_DBLCLK(
ON_CBN_DROPDOWN(
ON_CBN_EDITCHANGE(
ON_CBN_EDITUPDATE(
ON_CBN_ERRSPACE(
ON_CBN_KILLFOCUS(
ON_CBN_SELCHANGE(
ON_CBN_SELENDCANCEL(
ON_CBN_SELENDOK(
ON_CBN_SETFOCUS(
Check List Box Notification Codes
ON_CLBN_CHKCHANGE(
Edit Control Notification Codes
ON_EN_CHANGE(
ON_EN_ERRSPACE(
ON_EN_HSCROLL(
ON_EN_KILLFOCUS(
ON_EN_MAXTEXT(
ON_EN_SETFOCUS(
ON_EN_UPDATE(
ON_EN_VSCROLL(
List Box Notification Codes
ON_LBN_DBLCLK(
ON_LBN_ERRSPACE(
ON_LBN_KILLFOCUS(
ON_LBN_SELCANCEL(
ON_LBN_SELCHANGE(
ON_LBN_SETFOCUS(
Static Control Notification Codes
ON_STN_CLICKED(
ON_STN_DBLCLK(
ON_STN_DISABLE(
ON_STN_ENABLE(
Top
回复人: scxy(小熊) ( ) 信誉:94 2002-5-28 16:06:21 得分:0
HANDLERS FOR WINDOW NOTIFICATION MESSAGES
Map Entry Function Prototype
ON_WM_ACTIVATE() afx_msg void OnActivate(UINT, CWnd*, BOOL);
ON_WM_ACTIVATEAPP() afx_msg void OnActivateApp(BOOL, HTASK);
ON_WM_ASKCBFORMATNAME() afx_msg void OnAskCbFormatName(UINT, LPTSTR); ON_WM_CANCELMODE() afx_msg void OnCancelMode();
ON_WM_CAPTURECHANGED() afx_msg void OnCaptureChanged(CWnd*);
ON_WM_CHANGECBCHAIN() afx_msg void OnChangeCbChain(HWND, HWND);
ON_WM_CHAR() afx_msg void OnChar(UINT, UINT, UINT);
ON_WM_CHARTOITEM() afx_msg int OnCharToItem(UINT, CListBox*, UINT); ON_WM_CHARTOITEM_REFLECT() afx_msg int CharToItem(UINT, UINT);
ON_WM_CHILDACTIVATE() afx_msg void OnChildActivate();
ON_WM_CLOSE() afx_msg void OnClose();
ON_WM_COMPACTING() afx_msg void OnCompacting(UINT);
ON_WM_COMPAREITEM() afx_msg int OnCompareItem(int, LPCOMPAREITEMSTRUCT);
ON_WM_COMPAREITEM_REFLECT() afx_msg int CompareItem (LPCOMPAREITEMSTRUCT); ON_WM_CONTEXTMENU() afx_msg void OnContextMenu(CWnd*, CPoint);
ON_WM_COPYDATA() afx_msg BOOL OnCopyData(CWnd*, COPYDATASTRUCT*);
ON_WM_CREATE() afx_msg int OnCreate(LPCREATESTRUCT);
ON_WM_CTLCOLOR() afx_msg HBRUSH OnCtlColor(CDC*, CWnd*, UINT);
ON_WM_CTLCOLOR_REFLECT() afx_msg HBRUSH CtlColor(CDC*, UINT);
ON_WM_DEADCHAR() afx_msg void OnDeadChar(UINT, UINT, UINT);
ON_WM_DELETEITEM() afx_msg void OnDeleteItem(int, LPDELETEITEMSTRUCT);
ON_WM_DELETEITEM_REFLECT() afx_msg void DeleteItem (LPDELETEITEMSTRUCT)
ON_WM_DESTROY() afx_msg void OnDestroy();
ON_WM_DESTROYCLIPBOARD() afx_msg void OnDestroyClipboard();
ON_WM_DEVICECHANGE() afx_msg BOOL OnDeviceChange(UINT, DWORD);
ON_WM_DEVMODECHANGE() afx_msg void OnDevModeChange(LPTSTR);
ON_WM_DRAWCLIPBOARD() afx_msg void OnDrawClipboard();
ON_WM_DRAWITEM() afx_msg void OnDrawItem(int, LPDRAWITEMSTRUCT);
ON_WM_DRAWITEM_REFLECT() afx_msg void DrawItem (LPDRAWITEMSTRUCT);
ON_WM_DROPFILES() afx_msg void OnDropFiles(HDROP);
ON_WM_ENABLE() afx_msg void OnEnable(BOOL);
ON_WM_ENDSESSION() afx_msg void OnEndSession(BOOL);
ON_WM_ENTERIDLE() afx_msg void OnEnterIdle(UINT, CWnd*);
ON_WM_ENTERMENULOOP() afx_msg void OnEnterMenuLoop(BOOL);
ON_WM_ERASEBKGND() afx_msg BOOL OnEraseBkgnd(CDC*);
ON_WM_EXITMENULOOP() afx_msg void OnExitMenuLoop(BOOL);
ON_WM_FONTCHANGE() afx_msg void OnFontChange();
ON_WM_GETDLGCODE() afx_msg UINT OnGetDlgCode();
ON_WM_GETMINMAXINFO() afx_msg void OnGetMinMaxInfo (MINMAXINFO*);
ON_WM_HELPINFO() afx_msg BOOL OnHelpInfo(HELPINFO*);
ON_WM_HSCROLL() afx_msg void OnHScroll(UINT, UINT, CScrollBar*);
ON_WM_HSCROLL_REFLECT() afx_msg void HScroll(UINT, UINT);
ON_WM_HSCROLLCLIPBOARD() afx_msg void OnHScrollClipboard(CWnd*, UINT, UINT);
ON_WM_ICONERASEBKGND() afx_msg void OnIconEraseBkgnd(CDC*);
ON_WM_INITMENU() afx_msg void OnInitMenu(CMenu*);
ON_WM_INITMENUPOPUP() afx_msg void OnInitMenuPopup(CMenu*, UINT, BOOL);
ON_WM_KEYDOWN() afx_msg void OnKeyDown(UINT, UINT, UINT);
ON_WM_KEYUP() afx_msg void OnKeyUp(UINT, UINT, UINT);
ON_WM_KILLFOCUS() afx_msg void OnKillFocus(CWnd*);
ON_WM_LBUTTONDBLCLK() afx_msg void OnLButtonDblClk(UINT, CPoint);
ON_WM_LBUTTONDOWN() afx_msg void OnLButtonDown(UINT, CPoint);
ON_WM_LBUTTONUP() afx_msg void OnLButtonUp(UINT, CPoint);
ON_WM_MBUTTONDBLCLK() afx_msg void OnMButtonDblClk(UINT, CPoint);
ON_WM_MBUTTONDOWN() afx_msg void OnMButtonDown(UINT, CPoint);
ON_WM_MBUTTONUP() afx_msg void OnMButtonUp(UINT, CPoint);
ON_WM_MDIACTIVATE() afx_msg void OnMDIActivate(BOOL, CWnd*, CWnd*);
ON_WM_MEASUREITEM() afx_msg void OnMeasureItem(int, LPMEASUREITEMSTRUCT); ON_WM_MEASUREITEM_REFLECT() afx_msg void MeasureItem (LPMEASUREITEMSTRUCT);
ON_WM_MENUCHAR() afx_msg LRESULT OnMenuChar(UINT, UINT, CMenu*);
ON_WM_MENUSELECT() afx_msg void OnMenuSelect(UINT, UINT, HMENU);
ON_WM_MOUSEACTIVATE() afx_msg int OnMouseActivate(CWnd*, UINT, UINT);
ON_WM_MOUSEMOVE() afx_msg void OnMouseMove(UINT, CPoint);
ON_WM_MOUSEWHEEL() afx_msg BOOL OnMouseWheel(UINT, short, CPoint);
ON_WM_MOVE() afx_msg void OnMove(int, int);
ON_WM_MOVING() afx_msg void OnMoving(UINT, LPRECT);
ON_WM_NCACTIVATE() afx_msg BOOL OnNcActivate(BOOL);
ON_WM_NCCALCSIZE() afx_msg void OnNcCalcSize(BOOL, NCCALCSIZE_PARAMS*);
ON_WM_NCCREATE() afx_msg BOOL OnNcCreate (LPCREATESTRUCT);
ON_WM_NCDESTROY() afx_msg void OnNcDestroy();
ON_WM_NCHITTEST() afx_msg UINT OnNcHitTest(CPoint);
ON_WM_NCLBUTTONDBLCLK() afx_msg void OnNcLButtonDblClk(UINT, CPoint);
ON_WM_NCLBUTTONDOWN() afx_msg void OnNcLButtonDown(UINT, CPoint);
ON_WM_NCLBUTTONUP() afx_msg void OnNcLButtonUp(UINT, CPoint);
ON_WM_NCMBUTTONDBLCLK() afx_msg void OnNcMButtonDblClk(UINT, CPoint);
ON_WM_NCMBUTTONDOWN() afx_msg void OnNcMButtonDown(UINT, CPoint);
ON_WM_NCMBUTTONUP() afx_msg void OnNcMButtonUp(UINT, CPoint);
ON_WM_NCMOUSEMOVE() afx_msg void OnNcMouseMove(UINT, CPoint);
ON_WM_NCPAINT() afx_msg void OnNcPaint();
ON_WM_NCRBUTTONDBLCLK() afx_msg void OnNcRButtonDblClk(UINT, CPoint);
ON_WM_NCRBUTTONDOWN() afx_msg void OnNcRButtonDown(UINT, CPoint);
ON_WM_NCRBUTTONUP() afx_msg void OnNcRButtonUp(UINT, CPoint);
ON_WM_PAINT() afx_msg void OnPaint();
ON_WM_PAINTCLIPBOARD() afx_msg void OnPaintClipboard(CWnd*, HGLOBAL);
ON_WM_PALETTECHANGED() afx_msg void OnPaletteChanged(CWnd*);
ON_WM_PALETTEISCHANGING() afx_msg void OnPaletteIsChanging(CWnd*);
ON_WM_PARENTNOTIFY() afx_msg void OnParentNotify(UINT, LPARAM);
ON_WM_PARENTNOTIFY_REFLECT() afx_msg void ParentNotify(UINT, LPARAM);
ON_WM_QUERYDRAGICON() afx_msg HCURSOR OnQueryDragIcon();
ON_WM_QUERYENDSESSION() afx_msg BOOL OnQueryEndSession();
ON_WM_QUERYNEWPALETTE() afx_msg BOOL OnQueryNewPalette();
ON_WM_QUERYOPEN() afx_msg BOOL OnQueryOpen();
ON_WM_RBUTTONDBLCLK() afx_msg void OnRButtonDblClk(UINT, CPoint);
ON_WM_RBUTTONDOWN() afx_msg void OnRButtonDown(UINT, CPoint);
ON_WM_RBUTTONUP() afx_msg void OnRButtonUp(UINT, CPoint);
ON_WM_RENDERALLFORMATS() afx_msg void OnRenderAllFormats();
ON_WM_RENDERFORMAT() afx_msg void OnRenderFormat(UINT);
ON_WM_SETCURSOR() afx_msg BOOL OnSetCursor(CWnd*, UINT, UINT);
ON_WM_SETFOCUS() afx_msg void OnSetFocus(CWnd*);
ON_WM_SETTINGCHANGE() afx_msg void OnSettingChange(UINT, LPCTSTR);
ON_WM_SHOWWINDOW() afx_msg void OnShowWindow(BOOL, UINT);
ON_WM_SIZE() afx_msg void OnSize(UINT, int, int);
ON_WM_SIZECLIPBOARD() afx_msg void OnSizeClipboard(CWnd*, HGLOBAL);
ON_WM_SIZING() afx_msg void OnSizing(UINT, LPRECT);
ON_WM_SPOOLERSTATUS() afx_msg void OnSpoolerStatus(UINT, UINT);
ON_WM_STYLECHANGED() afx_msg void OnStyleChanged(int, LPSTYLESTRUCT);
ON_WM_STYLECHANGING() afx_msg void OnStyleChanging(int, LPSTYLESTRUCT);
ON_WM_SYSCHAR() afx_msg void OnSysChar(UINT, UINT, UINT);
ON_WM_SYSCOLORCHANGE() afx_msg void OnSysColorChange();
ON_WM_SYSCOMMAND() afx_msg void OnSysCommand(UINT, LPARAM);
ON_WM_SYSDEADCHAR() afx_msg void OnSysDeadChar(UINT, UINT, UINT);
ON_WM_SYSKEYDOWN() afx_msg void OnSysKeyDown(UINT, UINT, UINT);
ON_WM_SYSKEYUP() afx_msg void OnSysKeyUp(UINT, UINT, UINT);
ON_WM_TCARD() afx_msg void OnTCard(UINT, DWORD);
ON_WM_TIMECHANGE() afx_msg void OnTimeChange();
ON_WM_TIMER() afx_msg void OnTimer(UINT);
ON_WM_VKEYTOITEM() afx_msg int OnVKeyToItem(UINT, CListBox*, UINT);
ON_WM_VKEYTOITEM_REFLECT() afx_msg int VKeyToItem(UINT, UINT);
ON_WM_VSCROLL() afx_msg void OnVScroll(UINT, UINT, CScrollBar*);
ON_WM_VSCROLL_REFLECT() afx_msg void VScroll(UINT, UINT);
ON_WM_VSCROLLCLIPBOARD() afx_msg void OnVScrollClipboard(CWnd*, UINT, UINT);
ON_WM_WINDOWPOSCHANGED() afx_msg void OnWindowPosChanged (WINDOWPOS*);
ON_WM_WINDOWPOSCHANGING() afx_msg void OnWindowPosChanging (WINDOWPOS*);
ON_WM_WININICHANGE() afx_msg void OnWinIniChange(LPCTSTR);
Top
回复人: scxy(小熊) ( ) 信誉:94 2002-5-28 16:06:52 得分:0
USER-DEFINED MESSAGE CODES
Map Entry Function Prototype
ON_MESSAGE(
ON_REGISTERED_MESSAGE (
Windows消息分类 Windows应用程序都是基于消息驱动的,消息一般分为标准Windows消息、控件通知消息和命令消息三大类。 1. 标准Windows消息 标准Windows消息,除WM_COMMAND消息外,所有以WM为前缀的消息都是标准Windows消息。标准Windows消息只能由窗口类和视图类进行处理。标准Windows消息都有黙认的处理函数,这些函数在CWnd类中过行了预定义,处理函数均以前缀On开头。 标准Windows消息主要分为三类: (1)键盘消息 当用户按下键盘上的某一个键时,会产生WM_CHAR消息。该消息的处理函数为OnChar. (2) 鼠标消息 WM_MOUSEMOVE WM_LBUTTONDOWN WM_RBUTTONDOWN (3)窗口消息 所有窗口的变化,包括内容重绘、窗口最大化、窗口重新定义大小、窗口滚动条滚动等产生的消息均属于窗口消息。当调用成员函数UpdateWindow 或RedrawWindow要求重新绘制窗口内容时,将会发送WM_PAINT消息,当窗口最小化后再还原或被其它窗口遮盖后又移开时,也会发送WM_PAINT消息。WM_PAINT消息的处理函数为OnPaint. 2. 控件消息(WM_COMMAND) 由控件产生的消息,例如按钮,列表框的选择等都会产生通告消息。控件消息是从控件传送给父窗口的消息。发送控件消息的控件在Visual C++中使用唯一ID号来进行标识,使用控件类来操纵相应的控件。与标准Windows消息一样,控件消息也在视图类、窗口类进行处理。但是,如果用户单击按钮控件,所发出的控件通知消息BN_CLICKED将作为命令消息来处理。 3. 命令消息(WM_COMMAND) 命令消息是菜单项、工具栏按钮、加速键等用户界面对象发送的WM_COMMAND消息。命令消息可以被文档、视图、窗口、应用程序等对象处理。发送命令消息的用户界面对象在Visual C++中也使用唯一的ID号来标识。通过给界面和命令消息分配相同的ID号,可以把用户界面对象与命令联系起来。 Windows把非命令消息直接发送给窗口类对象,该窗口类中用于处理该消息的处理函数将被调用。但是,对于命令消息,将把命令消息发送给多个候选对象(称为命令目标),目标中总有一个将调用该命令的处理函数。 注意:由于CWnd类派生于CCmdTarget类,所以凡是从CWnd派生的类,他们既可以接收标准消息,也可以接收命令消息和通告消息。而对于从CCmdTarget类派生的类只能接收命令消息和通告消息,不能接受标准消息。 ********************************************************************************************** MFC是Windows下程序设计的最流行的一个类库,但是该类库比较庞杂,尤其是它的消息映射机制,更是涉及到很多低层的东西,首先我在这里描述一下,Windows 的消息种类: 一般分的话有三种: 1. 标准消息:除了WM_COMMAND,所有的以WM 开头的消息都是标准消息,从CWnd 派生的类,都可以接受此消息。
北大青鸟中关村:C#开发WinForm中Window 消息大全 消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。北大青鸟中关村:消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg,它在Windows 单元中是这样声明的: type TMsg = packed record hwnd: HWND; //窗口句柄message: UINT;//消息常量标识符wParam: WPARAM ;// 32位消息的特定附加信息lParam: LPARAM ;// 32位消息的特定附加信息time: DWORD;//消息创建时的时间pt: TPoint; //消息创建时的鼠标位置end ; 消息中有什么?是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:hwnd 32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。 lParam 通常是一个指向内存中数据的指针。由于WParam、lParam 和Pointer都是32位的,因此,它们之间可以相互转换。
public class WindowsMessage { public const int WM_NULL = 0x0000; // public const int WM_CREATE = 0x0001; //应用程序创建一个窗口 public const int WM_DESTROY = 0x0002; //一个窗口被销毁 public const int WM_MOVE = 0x0003; //移动一个窗口 public const int WM_SIZE = 0x0005; //改变一个窗口的大小 public const int WM_ACTIVATE = 0x0006; //一个窗口被激活或失去激活状态; public const int WM_SETFOCUS = 0x0007; //获得焦点后 public const int WM_KILLFOCUS = 0x0008; //失去焦点 public const int WM_ENABLE = 0x000A; //改变enable状态 public const int WM_SETREDRAW = 0x000B; //设置窗口是否能重画 public const int WM_SETTEXT = 0x000C; //应用程序发送此消息来设置一个窗口的文本 public const int WM_GETTEXT = 0x000D; //应用程序发送此消息来复制对应窗口的文本到缓冲区
MFC的类层次结构与运行机制 MFC的类层次结构 如图所示(子类指向父类): 其中: CObject:是MFC提供的绝大多数类的基类。该类完成动态空间的分配与回收,支持一般的诊断、出错信息处理和文档序列化等。 CCmdTarget:主要负责将系统事件(消息)和窗口事件(消息)发送给响应这些事件的对象,完成消息发送、等待和派遣调度等工作,实现应用程序的对象之间的协调运行。 CWinApp:是应用程序的主线程类,它是从CWinThread类派生而来的。CWinThread类用来完成对线程的控制,包括线程的创建、运行、终止和挂起等。 CDocument:是文档类,包含了应用程序在运行期间所用到的数据。 CWnd:是一个通用的窗口类,用来提供Windows中的所有通用特性、对话框和控件。 CFrameWnd是从CWnd类继承来的,并实现了标准的框架应用程序。 CDialog类用来控制对话框窗口。 CView:用于让用户通过窗口来访问文档。 CMDIFrameWnd和CMDIChildWnd:分别用于多文档应用程序的主框架窗口和文档子窗口的显示和管理。CMiniFrameWnd类是一种简化的框架窗口,它没有最大化和最小化窗口按钮,也没有窗口系统菜单,一般很少用到它。 MFC运行机制 在程序中,当定义一个类对象时,它会自动调用相应的构造函数。所谓"类对象",就是用该类定义的"变量",这个"变量"又称为类的一个实例。例如,theApp就是类CSimpApp的一个对象。 MFC正是利用类的这种"自动调用相应的构造函数"特性,使得WinMain()函数的调用变成了应用程序框架内部的调用,所以我们在代码中看不到每个Windows程序所必须有的WinMain()函数。 当应用程序运行到"CSimpApp theApp;"时,系统就会先调用基类CWinApp构造函数,进行一系列的内部初始化操作,然后自动调用CSimpApp的虚函数InitInstance(),该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。下面来看看上述程序中InitInstance的执行过程。 首先执行的是: m_pMainWnd = new CMainFrame; 该语句用来创建从CFrameWnd类派生而来的用户框架窗口CMainFrame类对象,继而调用该类的构造函数,使得Create函数被调用,完成了窗口创建工作。
Windows 事件ID及解释大全 0 操作成功完成。 1 函数不正确。 2 系统找不到指定的文件。 3 系统找不到指定的路径。 4 系统无法打开文件。 5 拒绝访问。 6 句柄无效。 7 存储控制块被损坏。 8 存储空间不足,无法处理此命令。 9 存储控制块地址无效。 10 环境不正确。 11 试图加载格式不正确的程序。 12 访问码无效。 13 数据无效。 14 存储空间不足,无法完成此操作。 15 系统找不到指定的驱动器。 16 无法删除目录。 17 系统无法将文件移到不同的驱动器。 18 没有更多文件。 19 介质受写入保护。 20 系统找不到指定的设备。
21 设备未就绪。 22 设备不识别此命令。 23 数据错误(循环冗余检查)。 24 程序发出命令,但命令长度不正确。 25 驱动器找不到磁盘上特定区域或磁道。 26 无法访问指定的磁盘或软盘。 27 驱动器找不到请求的扇区。 28 打印机缺纸。 29 系统无法写入指定的设备。 30 系统无法从指定的设备上读取。 31 连到系统上的设备没有发挥作用。 32 另一个程序正在使用此文件,进程无法访问。 33 另一个程序已锁定文件的一部分,进程无法访问。 36 用来共享的打开文件过多。 38 已到文件结尾。 39 磁盘已满。 50 不支持请求。 51 Windows 无法找到网络路径。请确认网络路径正确并且目标计算机不忙或已关闭。如果 Windows 仍然无法找到网络路径,请与网络管理员联系。 52 由于网络上有重名,没有连接。请到“控制面板”中的“系统”更改计算机名,然后重试。 53 找不到网络路径。 54 网络很忙。
用户是如何跟应用软件打交道的 我们来看看,用户究竟是如何与应用软件打交道的(用户不需要知道这个具体过程,但应用软件的开发人员必须知道),如下图所示: 从上图可以看到:在物理上,离用户最近的实际上是输入输出设备,下面我们看看上图中1-6这六个步骤分别表示什么意思(为了简便,在叙述时,我们的标号没有用圆圈): 1. 用户点击鼠标或者键盘; 2. Windows感觉到了鼠标或键盘的动作; 3. Windows把这个消息告诉应用程序; 4. 应用程序告诉Windows去做事,实际上就是应用程序调用Windows的API函数; 5. Windows让输出设备做事; 6. 用户获得输出。 对用户来说,没有必要了解输入输出设备和Windows的相关知识。对程序员(写应用程序的人)来说,没有必要了解输入输出设备,但是必须了解Windows的基本知识。在下面的叙述中,我们就不管输入输出设备了。
上面的过程还是很笼统,为了弄得更清楚,我们有必要了解Windows的消息机制,如图: 下面,我们来慢慢描述(上图中的虚线表示消息的流程): step0: 程序员编程,把WinMain函数和窗口回调函数写好; step1: Windows调用WinMain函数,启动应用程序,Windows会建立一个消息队列,用来存储消息。 step2: WinMain函数调用Windows的API函数,比如调用CreateWindow和ShowWindow, 从而生成并显示一个窗口。在调用CreateWindow函数时,会产生一个消息,这个消息并不进入消息队列,但窗口的回调函数仍然会处理,在此,我们不讨论非队列消息。 step3: WinMain函数调用Windows的API函数,比如调用GetMessage来从消息队列中取出消息。假设用户这个时候在窗口中点击鼠标,那么Windows会把这个事件包装成消息,投到消息队列中,GetMessage会取出这个消息,通过DispatchMessage送到Windows; step4: Windows进而会将该消息发送到窗口的回调函数,并对该函数进行调用; step5:窗口的回调函数可以对这个消息进行相应处理,这个处理的具体方法由程序员自己决定,通常是调用Windows的API函数来实现处理。
windows运行命令大全winver 检查Windows版本 wmimgmt.msc 打开Windows管理体系结构(wmi) wupdmgr Windows更新程序 wscript Windows脚本宿主设置 write 写字板 winmsd 系统信息 wiaacmgr 扫描仪和照相机向导 winchat xp自带局域网聊天 mem.exe 显示内存使用情况 msconfig.exe 系统配置实用程序 mplayer2 简易widnows media player mspaint 画图板 mstsc 远程桌面连接 mplayer2 媒体播放机 magnify 放大镜实用程序 mmc 打开控制台 mobsync 同步命令 dxdiag 检查directx信息 drwtsn32 系统医生 devmgmt.msc 设备管理器
dfrg.msc 磁盘碎片整理程序 diskmgmt.msc 磁盘管理实用程序 dcomcnfg 打开系统组件服务 ddeshare 打开dde共享设置 dvdplay dvd播放器 net stop messenger 停止信使服务 net start messenger 开始信使服务 notepad 打开记事本 nslookup 网络管理的工具向导 ntbackup 系统备份和还原 narrator 屏幕“讲述人” ntmsmgr.msc 移动存储管理器 ntmsoprq.msc 移动存储管理员操作请求 netstat -an (tc)命令检查接口 syncapp 创建一个公文包 sysedit 系统配置编辑器 sigverif 文件签名验证程序 sndrec32 录音机 shrpubw 创建共享文件夹 secpol.msc 本地安全策略 syskey 系统加密,一旦加密就不能解开,保护Windows xp系统的双重
Windows的事件驱动机制 在Windosw系统中,程序的设计围绕事件驱动来进行。当对象有相关的事件发生时(如按下鼠标键),对象产生一条特定的标识事件发生的消息,消息被送入消息队列,或不进入队列而直接发送给处理对象,主程序负责组织消息队列,将消息发 送给相应的处理程序,使相应的处理程序执行相应的动作,做完相应的处理后将控制权交还给主程序。 在这种机制中,对象的请求仅仅是向队列中添加相应的消息,耗时的处理则被分离给处理函数。这种结构的程序中各功能模块界限分明,便于扩充,能充分利用CPU 的处理能力,使系统对外界响应准确而及时。 Windows事件驱动机制 我们当中不少使用VC、Delphi等作为开发语言的程序员是一步步从DOS 下的Basic、C++中走过来的,而且大多在刚开始学习编程时也是先从DOS下的编程环境入手的,因此在习惯了DOS下的过程驱动形式的顺序程序设计方法后,往往在向Windows下的开发环境转型的过程中会对Windows所采取的事件驱动方式感到无法适应。因为DOS和Windows这两种操作系统的运行机制是截然不同的,DOS下的任何程序都是使用顺序的、过程驱动的程序设计方法。这种程序都有一个明显的开始、明显的过程以及一个明显的结束,因此通过程序就能直接控制程序事件或过程的全部顺序。即使是在处理异常时,处理过程也仍然是顺序的、过程驱动的结构。而Windows的驱动方式则是事件驱动的,即程序的流程不是由事件的顺序来控制,而是由事件的发生来控制,所有的事件是无序的,所为一个程序员,在编写程序时,并不知道用户会先按下哪个按纽,也就不知道程序先触发哪个消息。因此我们的主要任务就是对正在开发的应用程序要发出的或要接收的消息进行排序和管理。事件驱动程序设计是密切围绕消息的产生与处理而展开的,一条消息是关于发生的事件的消息。 Windows的消息循环 Windows操作系统为每一个正在运行的应用程序保持有一个消息队列。当有事件发生后,Windows并不是将这个激发事件直接送给应用程序,而是先将其翻译成一个Windows消息,然后再把这个消息加入到这个应用程序的消息队列中去。应用程序需要通过消息循环来接收这些消息。在MFC中使用了对WinAPI进行了很好封装的类库,虽然可以为编程提供一个面向对象的界面,使Windows程序员能够以面象对象的方式进行编程,把那些进行SDK编程时最
Window消息传递机制 MFC将thread分成winddow thread和worker thread,在讨论多现程(Multi-thread)之前,我们先只考虑window thread。 windows programming的基本工作方式和console application的不同,基本上是这样运行的,程序从WinMain()开始,然后进入一个message loop,程序在这里等待发给它的所有消息然后一一处理,直到接收到WM_QUIT的消息的时候,message loop终止,程序结束。所以整个主程序运行的过程就是等待消息,接收消息,然后处理消息的过程。 窗口建立的时候CreateWindow, RegisterWindow之类的不必太费心,MFC已经全管理妥当了,需要提起一点注意的是程序开始时HINSTANCE hInstance这个参数,在和DLL打交道的时候会帮你解决很多问题,如果一个Bitmap Load不上来,或者一个Dialog DoModal 之后不出来,估计就得向这个参数求助了,这是后话。 具体处理的消息的函数叫window procedure,具体处理消息的code叫message handler。它可以是当前应用程序的API,也可以是调用的不同DLL的API。不同的DLL叫不同的m odule。以后的文章中我会具体说明module state。是个很重要的话题。(当项目大的时候) 没有message handler的消息交给DefWindowProc()函数处理,差不多可以理解为什么也不作了。 消息包括四个参数,window handle,message ID,和另外两个参数wParam, lParam。win dow handle可以作为window的识别ID来用。所以在发送消息的时候如果可以有两种格式:CWnd *pWnd = .... if (pWnd && pWnd->GetSafeWnd()) pWnd->SendMessage(message, wParam = 0, lParam); 或者 SendMessage(pWnd->GetSafeWnd(), message, wParam, lParam ) 发送消息如果用SendMessage消息将立刻发送,如果用PostMessage,消息将进入Message queue按当前顺序发送,一般没有特别的要求PostMessage已经足够了。 处理消息的时候根据不同的Message ID交给不同的message handler去处理,一般的messa ge handler的接收格式是用wParam传一个关键的参数,如这次操作的具体ID,把其余的大量辅助信息放在lParam里。需要注意的是如果lParam传递的是一个指针(一般情况下是CO bject类的或从CObject衍生出来的),这个指针指向的变量的寿命需要足够长,因为信息Po st出去之后发送函数很可能就运行完毕了。如果发送的指针是个局部变量,接收方就一定会Crash。当然如果是发送方new出来的变量,接收方得负责帮他delete掉,这个操作很危险,而且不一定合适。有时候发送方把信息传给N个窗口,第一个窗口delete掉了第二个窗口就麻烦了,不delete掉又不能保证第二个窗口一定delete掉,所以如果可能,不用new为上策。用点什么成员变量,常数变量之类的比较好。
开始→运行→输入的命令集锦 winver---------检查Windows版本 wmimgmt.msc----打开windows管理体系结构(WMI) wupdmgr--------windows更新程序 wscript--------windows脚本宿主设置 write----------写字板 winmsd---------系统信息 wiaacmgr-------扫描仪和照相机向导 winchat--------XP自带局域网聊天 mem.exe--------显示内存使用情况 Msconfig.exe---系统配置实用程序 mplayer2-------简易widnows media player mspaint--------画图板 mstsc----------远程桌面连接 mplayer2-------媒体播放机 magnify--------放大镜实用程序 mmc------------打开控制台 mobsync--------同步命令 dxdiag---------检查DirectX信息 drwtsn32------ 系统医生 devmgmt.msc--- 设备管理器 dfrg.msc-------磁盘碎片整理程序 diskmgmt.msc---磁盘管理实用程序 dcomcnfg-------打开系统组件服务 ddeshare-------打开DDE共享设置 dvdplay--------DVD播放器 net stop messenger-----停止信使服务 net start messenger----开始信使服务 notepad--------打开记事本 nslookup-------网络管理的工具向导 ntbackup-------系统备份和还原 narrator-------屏幕“讲述人” ntmsmgr.msc----移动存储管理器 ntmsoprq.msc---移动存储管理员操作请求 netstat -an----(TC)命令检查接口 syncapp--------创建一个公文包 sysedit--------系统配置编辑器 sigverif-------文件签名验证程序 sndrec32-------录音机 shrpubw--------创建共享文件夹 secpol.msc-----本地安全策略 syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码 services.msc---本地服务设置Sndvol32-------音量控制程序 sfc.exe--------系统文件检查器 sfc /scannow---windows文件保护 tsshutdn-------60秒倒计时关机命令 tourstart------xp简介(安装完成后出现的漫游xp程序)taskmgr--------任务管理器 eventvwr-------事件查看器 eudcedit-------造字程序 explorer-------打开资源管理器 packager-------对象包装程序 perfmon.msc----计算机性能监测程序 progman--------程序管理器 regedit.exe----注册表 rsop.msc-------组策略结果集 regedt32-------注册表编辑器 rononce -p ----15秒关机 regsvr32 /u *.dll----停止dll文件运行 regsvr32 /u zipfldr.dll------取消ZIP支持 cmd.exe--------CMD命令提示符 chkdsk.exe-----Chkdsk磁盘检查 certmgr.msc----证书管理实用程序 calc-----------启动计算器 charmap--------启动字符映射表 cliconfg-------SQL SERVER 客户端网络实用程序 Clipbrd--------剪贴板查看器 conf-----------启动netmeeting compmgmt.msc---计算机管理 cleanmgr-------垃圾整理 ciadv.msc------索引服务程序 osk------------打开屏幕键盘 odbcad32-------ODBC数据源管理器 oobe/msoobe /a----检查XP是否激活 lusrmgr.msc----本机用户和组 logoff---------注销命令 iexpress-------木马捆绑工具,系统自带 Nslookup-------IP地址侦测器 fsmgmt.msc-----共享文件夹管理器 utilman--------辅助工具管理器 sndrec32-------录音机 Nslookup-------IP地址侦测器 explorer-------打开资源管理器 logoff---------注销命令 tsshutdn-------60秒倒计时关机命令 lusrmgr.msc----本机用户和组
一单选题 1.在Windows编程约定中,应用程序接口的英文缩写是(A)。 A.API B.SDI C.GDI D.MDI 2.在Windows编程约定中,软件开发包的英文缩写是(C)。 A.API B.SDI C.SDK D.MDI 3.在Windows编程约定中,图像设备接口的英文缩写是(C)。 A.API B.SDI C.GDI D.MDI 4.以下对应于unsigned long的数据类型为:(B) A.WORD B.DWORD C.INT D.BYTE 5.下列选项中,不属于匈牙利命名法属性部分的是(D)。 A.g_ B.m_ C.c_ D.d_ 6.如果要严格按照匈牙利命名法命名1个全局窗口句柄,以下变量命名正确的是(A)。 A.g_hWnd B.m_hWnd C.g_pWnd D.m_pWnd 7.下列Windows数据格式中,代表设备句柄的是(B)。 A.HWND B.HDC C.HINSTANCE D.HFONT 8."在一个窗口的正常运行的Windows程序中,把主窗口创建语句做如下改动: hWnd=CreateWindow(NULL,szTitle,WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL); 则下列说法正确的是(C)。" B.程序仍然正常运行,与改动前相比没有变化 C.程序出现编译错误 D.程序编译通过,但没有窗口显示 E.程序正常运行,窗口标题变为NULL
9.典型的Windows窗口程序的流程为:(A) A.注册窗口类->创建窗口->显示窗口->更新窗口->消息循环 B.创建窗口->注册窗口类->显示窗口->更新窗口->消息循环 C.创建窗口->注册窗口类->显示窗口->更新窗口->消息循环 D.注册窗口类->创建窗口->更新窗口->显示窗口->消息循环 10.菜单编辑器中,如果要设置某个项为分隔线,那么这个项的哪个属性为true。(D) A.Visible B.Grayed C.Enable D.Separator 11.在Windows消息机制中,菜单消息类型是:(B) A.WM_PAINT B.WM_COMMAND C.WM_CREATE D.WM_CLOSE 12.在Windows编程中,代表键盘的"↑"键的虚拟键值是(A)。 A.VK_UP B.WM_KEYDOWN C.WM_KEYUP D.VK_DOWN 13.在Windows编程中,响应键盘按键按下消息的Windows消息是(B)。 A.VK_UP B.WM_KEYDOWN C.WM_KEYUP D.VK_DOWN 14.在Windows编程中,按下键盘的"A"键后,返回的Windows消息是(B)。 A.VK_A B.WM_KEYDOWN C.A D.DIK_A 15.在Windows编程中,按下鼠标左键产生的Windows消息是(B)。 A.WM_KEYDOWN B.WM_LBUTTONDOWN C.WM_LEFT D.WM_RBUTTONDOWN 16.在Windows编程中,标准鼠标的按键数是(C)。 A.1 B.2 C.3 D.4 17.Windows编程中,定时器消息是(B) A.WM_TIME B.WM_TIMER C.WM_ON_TIME
遇到什么错误了就找找,应该会有帮助的。 6001 0x1771 指定的文件无法解密。 6002 0x1772 指定的文件已加密,而且用户没有能力解密。 6003 0x1773 这个系统没有有效的加密恢复策略配置。 6004 0x1774 所需的加密驱动程序并未加载到系统中。 6005 0x1775 文件加密所使用的加密驱动程序与目前加载的加密驱动程序不同。 6006 0x1776 没有为用户定义EFS 关键字。 6007 0x1777 指定的文件并未加密。 6008 0x1778 指定的文件不是定义的EFS 导出格式。 6009 0x1779 指定的文件是只读文件。 6010 0x177A 已为加密而停用目录。 6011 0x177B 不信任服务器来进行远程加密操作。 6012 0x177C 为此系统配置的恢复策略包含无效恢复证书。 6013 0x177D 用在此源文件上的加密算法需要比目标文件上更大的密钥缓冲区。 6014 0x177E 磁盘分区不支持文件加密。 6015 0x177F 这台机器已为文件加密而停用。 6016 0x1780 需要一个更新的系统来解密此加密文件。 6118 0x17E6 此工作组的服务器列表当前无法使用 6200 0x1838 要正常运行,任务计划程序服务的配置必须在系统帐户中运行。单独的任务可以被配 置成在其他帐户中运行。 6600 0x19C8 日志服务遇到无效日志扇区。 6601 0x19C9 日志服务遇到块校验无效的日志扇区。 6602 0x19CA 日志服务遇到重映射的日志扇区。 6603 0x19CB 日志服务遇到部分或未完成的日志块。 6604 0x19CC 日志服务遇到错误,原因:试图访问活动日志范围外的数据。 6605 0x19CD 日志服务用户排列缓冲区已用尽。 6606 0x19CE 日志服务遇到错误,原因:试图从读取上下文无效的排列区读取。 6607 0x19CF 日志服务遇到无效日志重新启动区域。 6608 0x19D0 日志服务遇到无效日志块版本。 6609 0x19D1 日志服务遇到无效日志块。 6610 0x19D2 日志服务遇到错误,原因:试图以无效读取模式读取。 6611 0x19D3 日志服务遇到错误,原因:日志流没有重启动区。 6612 0x19D4 日志服务遇到损坏的元数据文件。 6613 0x19D5 日志服务遇到无法由日志文件系统创建的元数据文件。 6614 0x19D6 日志服务遇到数据不一致的元数据文件。 6615 0x19D7 日志服务遇到错误,原因:试图分配和排列保留空间。 6616 0x19D8 BITS 报告计划下载已经失败了%2 次。原因是: %1。日志服务无法删除日志文件或 文件系统容器。 6617 0x19D9 日志已经达到允许分配给日志文件的容器的上限。 6618 0x19DA 日志服务试图读取或写入日志开始之前的位置。
Win32消息大全 阿杰发表于:2007-8-1720:52来源:外挂基地 消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg, 它在Windows单元中是这样声明的: type TMsg=packed record hwnd:HWND;//窗口句柄 message:UINT;//消息常量标识符 wParam:WPARAM;//32位消息的特定附加信息 lParam:LPARAM;//32位消息的特定附加信息 time:DWORD;//消息创建时的时间 pt:TPoint;//消息创建时的鼠标位置 end; 消息中有什么?
是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释: hwnd32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。 message用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。 wParam通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。 lParam通常是一个指向内存中数据的指针。由于W P a r a m、l P a r a m和P o i n t e r 都是32位的, 因此,它们之间可以相互转换。 WM_NULL=$0000; WM_CREATE=$0001; 应用程序创建一个窗口 WM_DESTROY=$0002; 一个窗口被销毁 WM_MOVE=$0003; 移动一个窗口 WM_SIZE=$0005; 改变一个窗口的大小 WM_ACTIVATE=$0006;
Windows 批处理大全(附各种实例) 批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。 一.简单批处理内部命令简介 1.Echo 命令 打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。 语法 echo [{on|off}] [message] Sample:@echo off / echo hello world 在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。 2.@ 命令 表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。 Sample:@echo off @echo Now initializing the program,please wait a minite... @format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。) 3.Goto 命令 指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。 语法:goto label (label是参数,指定所要转向的批处理程序中的行。) Sample: if {%1}=={} goto nop arm s if {%2}=={} goto nop arm s(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。) @Rem check parameters if null show usage :nop arm s echo Usage: monitor.bat ServerIP PortNumber goto end 标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。 4.Rem 命令 注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的
windows消息大全及钩子介绍 windows消息大全 (2) 声明 (2) 消息中有什么? (2) 通知消息 (23) 按扭 (23) 组合框 (23) 编辑框 (24) 列表框 (24) Windows消息中的虚拟键列表 (25) Windows消息中的虚拟键 (25) DirectInput中的虚拟键 (27) HOOK专题 (29) 基本概念 (29) 运行机制 (30) 1、钩子链表和钩子子程: (30) 2、钩子的安装与释放: (31) 3、一些运行机制: (33) 4、系统钩子与线程钩子: (34) 钩子类型 (35) 1、WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks (35) 2、WH_CBT Hook (35) 3、WH_DEBUG Hook (36) 4、WH_FOREGROUNDIDLE Hook (36) 5、WH_GETMESSAGE Hook (36) 6、WH_JOURNALPLAYBACK Hook (36) 7、WH_JOURNALRECORD Hook (37) 8、WH_KEYBOARD Hook (37) 9、WH_KEYBOARD_LL Hook (37) 10、WH_MOUSE Hook (37) 11、WH_MOUSE_LL Hook (37) 12、WH_MSGFILTER 和WH_SYSMSGFILTER Hooks (38) 13、WH_SHELL Hook (38)
windows消息大全 消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg, 声明 它在Windows单元中是这样声明的: type TMsg = packed record hwnd: HWND; / /窗口句柄 message: UINT; / /消息常量标识符 wParam: WPARAM ; // 32位消息的特定附加信息 lParam: LPARAM ; // 32位消息的特定附加信息 time: DWORD; / /消息创建时的时间 pt: TPoint; / /消息创建时的鼠标位置 end; 消息中有什么? 是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:
一、单选题 01. 在Windows编程约定中,应用程序接口的英文缩写是( A )。 A. API B. SDI C. GDI D. MDI 02. 在Windows编程约定中,软件开发包的英文缩写是( C )。 A. API B. SDI C. SDK D. MDI 03. 在Windows编程约定中,图像设备接口的英文缩写是( C )。 A. API B. SDI C. GDI D. MDI 04. 以下对应于unsigned long 的数据类型为:( B ) A. WORD B. DWORD C. INT D. BYTE 05. 下列选项中,不属于匈牙利命名法属性部分的是( D )。 A. g_ B. m_ C. c_ D. d_ 06. 如果要严格按照匈牙利命名法命名1个全局窗口句柄,以下变量命名正确的是( A )。 A. g_hWnd B. m_hWnd C. g_pWnd D. m_pWnd 07. 下列Windows数据格式中,代表设备句柄的是( B )。 A. HWND B. HDC C. HINSTANCE D. HFONT 08. 典型的Windows窗口程序的流程为:( A ) A. 注册窗口类->创建窗口->显示窗口->更新窗口->消息循环 B. 创建窗口->注册窗口类->显示窗口->更新窗口->消息循环 C. 创建窗口->注册窗口类->显示窗口->更新窗口->消息循环 D. 注册窗口类->创建窗口->更新窗口->显示窗口->消息循环 09. 菜单编辑器中,如果要设置某个项为分隔线,那么这个项的哪个属性为true。( D ) A. Visible B. Grayed C. Enable D. Separator 10. 在Windows消息机制中,菜单消息类型是:( B ) A. WM_PAINT B. WM_COMMAND C. WM_CREATE D. WM_CLOSE 11. 在Windows编程中,代表键盘的"↑"键的虚拟键值是( A )。 A. VK_UP B. WM_KEYDOWN C. WM_KEYUP D. VK_DOWN 12. 在Windows编程中,响应键盘按键按下消息的Windows消息是( B )。 A. VK_UP B. WM_KEYDOWN C. WM_KEYUP D. VK_DOWN 13 在Windows编程中,按下键盘的"A"键后,返回的Windows消息是( B )。 A. VK_A B. WM_KEYDOWN C. A D. DIK_A 14. 在Windows编程中,按下鼠标左键产生的Windows消息是( B )。 A. WM_KEYDOWN B. WM_LBUTTONDOWN C. WM_LEFT D. WM_RBUTTONDOWN 15. 在Windows编程中,标准鼠标的按键数是( C )。 A. 1 B. 2 C. 3 D. 4 16. Windows编程中,定时器消息是( B ) A. WM_TIME B. WM_TIMER C. WM_ON_TIME D. WM_COMMAND 17. GDI环境中,窗口的坐标系是如何构成的?( D ) A. 左上角为原点,x轴正方向为水平向右,y轴正方向为竖直朝上 B. 中间为原点,x轴正方向为水平向右,y轴正方向为竖直朝上 C. 左下角为原点,x轴正方向为水平向右,y轴正方向为竖直朝下 D. 左上角为原点,x轴正方向为水平向右,y轴正方向为竖直向下 18. 以下选项中,GDI不能支持的是:( B ) A. 位图 B. Flash动画 C. 直线和曲线 D. 文字 19. 设备环境DC的全称为:( B ) A. Device Content B. Device Contexts C. Device Config D. Device Conter 20. InvalidateRect的作用是( B )