MFC消息和消息映射机制整理
使用示例
- 在头文件的类(比如MyDialog)的声明中指定:
DECLARE_MESSAGE_MAP()
- 在对应的cpp文件中指定:
BEGIN_MESSAGE_MAP(MyDialog, CDialog) ON_WM_PAINT() // 以下放其他的消息映射函数 END_MESSAGE_MAP()
- 实现对应的消息函数
// h文件 afx_msg void OnPaint(); // cpp文件 void MyDialog::OnPaint() { // TODO }
消息类型
控件通知消息
消息开头 | 控件类型 |
---|---|
ON_STN_XXX | Static control notification codes |
ON_EN_XXX | Edit Control Notification Codes |
ON_ACN_XXX | Animation Control Notification Codes |
ON_BN_XXX | User Button Notification Codes |
ON_LBN_XXX | Listbox Notification Codes |
ON_CLBN_CHKCHANGE | Check Listbox Notification codes |
ON_CBN_XXX | Combo Box Notification Codes |
用户自定义,用户自己使用的消息
消息类型 | 用途 |
---|---|
ON_MESSAGE | for Windows messages |
ON_REGISTERED_MESSAGE | for Registered Windows messages |
ON_THREAD_MESSAGE | for Thread messages |
ON_REGISTERED_THREAD_MESSAGE | for Registered Windows messages |
Windows系统消息
消息类型 | 对应消息函数 | 用途或调用时机 |
---|---|---|
ON_WM_CREATE | OnCreate | 应用程序通过Create或者CreateEx函数时会调用该函数 |
ON_WM_COPYDATA | OnCopyData | 两个应用程序相互拷贝数据时使用 |
ON_WM_DESTROY | OnDestroy | 窗口对象从屏幕中移除会调用该函数 父窗口调用该函数结束后才调用子窗口的OnDestroy函数 |
ON_WM_MOVE | OnMove | 窗口的位置发生变化后调用该函数,参数是新的x,y坐标 |
ON_WM_SIZE | OnSize | 窗口的大小变化后调用该函数,参数程序cx,cy是新的客户端区域的宽高 |
ON_WM_ACTIVATE | OnActivate | 窗口激活和失活都会调用该函数,nState指定的是即将要变化到的状态 |
ON_WM_SETFOCUS | OnSetFocus | 窗口获取输入焦点后会调用该函数 |
ON_WM_KILLFOCUS | OnKillFocus | 窗口失去输入焦点前会立即调用该函数 |
ON_WM_ENABLE | OnEnable | 应用程序改变窗口的enable状态时会调用该函数 |
ON_WM_HELPINFO | OnHelpInfo | 用户按下F1键时调用 |
ON_WM_PAINT | OnPaint | 应用程序发出请求绘制窗口的一部分的时候调用 |
ON_WM_SYNCPAINT | OnSyncPaint | |
ON_WM_CLOSE | OnClose | 应用程序或者窗口对象将要终结时调用 |
ON_WM_QUERYENDSESSION | OnQueryEndSession | 用户选择结束Windows session或者应用程序调用ExitWindows时调用 |
ON_WM_QUERYOPEN | OnQueryOpen | 当窗口对象处于最小化状态时,用户请求窗口恢复到其先前的大小和位置时调用 |
ON_WM_ERASEBKGND | OnEraseBkgnd | 当窗口对象的背景需要擦除时调用该函数 |
ON_WM_SYSCOLORCHANGE | OnSysColorChange | 当系统的颜色设置发生变化时,所有的top-level窗口会调用该函数 |
ON_WM_ENDSESSION | OnEndSession | OnQueryEndSession返回非0值调用该函数 |
ON_WM_WTSSESSION_CHANGE | OnSessionChange | 调用该函数以通知应用程序session的状态发生改变 |
ON_WM_SHOWWINDOW | OnShowWindow | 窗口对象将要隐藏或将要显示前调用 |
ON_WM_CTLCOLOR | OnCtlColor | 子控件将要绘制前调用 |
ON_WM_CTLCOLOR_REFLECT | CtlColor | |
ON_WM_SETTINGCHANGE | OnSettingChange | 当Win32 系统参数信息函数改变了系统设置时,所有的top-level窗口调用该函数 |
ON_WM_WININICHANGE | OnWinIniChange | WIN.INI文件发生变化时,调用该函数 |
ON_WM_DEVMODECHANGE | OnDevModeChange | 用户改变了device-mode设置时,所有的top-level窗口调用该函数 |
ON_WM_ACTIVATEAPP | OnActivateApp | 应用程序的所有top-level窗口即将被激活或失活时调用 |
ON_WM_FONTCHANGE | OnFontChange | 应用程序改变了font资源池时调用 |
ON_WM_TIMECHANGE | OnTimeChange | 系统时间改变时调用该函数 |
ON_WM_CANCELMODE | OnCancelMode | 调用该函数以取消任意的内部模式 |
ON_WM_SETCURSOR | OnSetCursor | 鼠标输入没有被捕获到,并且鼠标光标在窗口对象中移动时调用该函数 |
ON_WM_MOUSEACTIVATE | OnMouseActivate | 鼠标光标在一个非激活窗口内部,此时用户按下鼠标按钮后,调用该函数 |
ON_WM_CHILDACTIVATE | OnChildActivate | 当窗口对象是MDI结构的子窗口时,当用户点击窗口的title bar或者窗口被激活、移动、改变大小时调用该函数 |
ON_WM_GETMINMAXINFO | OnGetMinMaxInfo | 当Windows想要知道窗口最大化时的位置和窗口大小或者minimum or maximum tracking size时调用 |
ON_WM_ICONERASEBKGND | OnIconEraseBkgnd | 针对的是最小化时的窗口对象,在其icon被绘制前,其icon的背景必须被填满 |
ON_WM_SPOOLERSTATUS | OnSpoolerStatus | 当一项任务被添加到Print Manager的队列或者从队列中移出时调用该函数 |
ON_WM_DRAWITEM | OnDrawItem | 对于一个owner窗口来说,其own的子控件(比如owner-draw button control, combo-box control, list-box control, or menu)发生改变时调用该函数 |
ON_WM_DRAWITEM_REFLECT | DrawItem | |
ON_WM_MEASUREITEM | OnMeasureItem | The framework calls this member function by the framework for the owner of an owner-draw button, combo box, list box, or menu item when the control is created |
ON_WM_MEASUREITEM_REFLECT | MeasureItem | |
ON_WM_DELETEITEM | OnDeleteItem | The framework calls this member function to inform the owner of an owner-draw list box or combo box that the list box or combo box is destroyed or that items have been removed by CComboBox::DeleteString, CListBox::DeleteString, CComboBox::ResetContent, or CListBox::ResetContent. |
ON_WM_DELETEITEM_REFLECT | DeleteItem | |
ON_WM_CHARTOITEM | OnCharToItem | 针对带LBS_WANTKEYBOARDINPUT样式的list box,该控件向其owner发送一个WM_CHARTOITEM消息以响应WM_CHAR消息 |
ON_WM_VKEYTOITEM | OnVKeyToItem | 针对带LBS_WANTKEYBOARDINPUT样式的list box,该控件会发送WM_VKEYTOITEM以响应WM_KEYDOWN消息 |
ON_WM_VKEYTOITEM_REFLECT | VKeyToItem | |
ON_WM_QUERYDRAGICON | OnQueryDragIcon | 当窗口处于最小化时,但是窗口类中没有指定icon会调用该函数 |
ON_WM_COMPAREITEM | OnCompareItem | 当在已排序的owner-draw combo或者list box中指定一个新项时会调用该函数 |
ON_WM_COMPAREITEM_REFLECT | CompareItem | |
ON_WM_COMPACTING | OnCompacting | |
ON_WM_NCCREATE | OnNcCreate | 当窗口对象在第一次创建时会比WM_CREATE消息先调用该函数 |
ON_WM_NCDESTROY | OnNcDestroy | 非客户端区域即将销毁时调用该函数,且该函数是窗口对象被销毁时最后一个调用的函数 |
ON_WM_NCCALCSIZE | OnNcCalcSize | 窗口的客户端区域的位置和大小需要被重新计算时调用该函数 |
ON_WM_NCHITTEST | OnNcHitTest | 每一次鼠标光标移动到窗口对象上或者窗口对象显式调用SetCapture函数来获取鼠标输入时调用该函数 |
ON_WM_NCPAINT | OnNcPaint | 窗口的非客户端区域需要重绘时调用 |
ON_WM_NCACTIVATE | OnNcActivate | 窗口的非客户端区域激活或失活时调用 |
ON_WM_GETDLGCODE | OnGetDlgCode | 调用以处理arrow-key和Tab-key输入 |
ON_WM_NCMOUSEMOVE | OnNcMouseMove | 当鼠标移入窗口的非客户端区域时调用 |
ON_WM_NCMOUSEHOVER | OnNcMouseHover | 当在前一次调用TrackMouseEvent之后的某一段之间(时间在TrackMouseEvent中指定)内鼠标移动到窗口并处于Hover状态时调用该函数 |
ON_WM_NCMOUSELEAVE | OnNcMouseLeave | 在前一次调用TrackMouseEvent后鼠标从非客户端离开时调用该函数 |
ON_WM_NCLBUTTONDOWN | OnNcLButtonDown | 用户在窗口的非客户端区域按下鼠标左键调用该函数 |
ON_WM_NCLBUTTONUP | OnNcLButtonUp | 用户在窗口的非客户端区域释放按下的鼠标左键时调用该函数 |
ON_WM_NCLBUTTONDBLCLK | OnNcLButtonDblClk | 用户在窗口的非客户端区域双击鼠标左键 |
ON_WM_NCRBUTTONDOWN | OnNcRButtonDown | 用户在窗口的非客户端区域按下鼠标右键时调用该函数 |
ON_WM_NCRBUTTONUP | OnNcRButtonUp | 用户在窗口的非客户端区域释放按下的鼠标右键时调用该函数 |
ON_WM_NCRBUTTONDBLCLK | OnNcRButtonDblClk | 用户在窗口的非客户端区域双击鼠标右键 |
ON_WM_NCMBUTTONDOWN | OnNcMButtonDown | 用户在窗口的非客户端区域按下鼠标中键调用该函数 |
ON_WM_NCMBUTTONUP | OnNcMButtonUp | 用户在窗口的非客户端区域释放按下的鼠标中键调用该函数 |
ON_WM_NCMBUTTONDBLCLK | OnNcMButtonDblClk | 用户在窗口的非客户端区域双击鼠标中键 |
ON_WM_NCXBUTTONDOWN | OnNcXButtonDown | 某些鼠标左右两侧有按键,响应这些按键按下 |
ON_WM_NCXBUTTONUP | OnNcXButtonUp | 某些鼠标左右两侧有按键,响应这些按键释放 |
ON_WM_NCXBUTTONDBLCLK | OnNcXButtonDblClk | 某些鼠标左右两侧有按键,响应这些按键连续按下两次 |
ON_WM_KEYDOWN | OnKeyDown | 一个非系统按键被按下调用该函数 |
ON_WM_KEYUP | OnKeyUp | 一个非系统按键被释放调用该函数 |
ON_WM_HOTKEY | OnHotKey | 用户按下系统范围的热键时调用该函数(ALT/Ctrl/Shift/Win) |
ON_WM_CHAR | OnChar | 非系统按键按下 |
ON_WM_UNICHAR | OnUniChar | |
ON_WM_DEADCHAR | OnDeadChar | 当OnKeyUp函数和OnKeyDown函数被一起调用时调用 |
ON_WM_SYSKEYDOWN | OnSysKeyDown | 前提是窗口对象有输入焦点,用户按下Alt+其他键会调用该函数 |
ON_WM_SYSKEYUP | OnSysKeyUp | 前提是窗口对象有输入焦点,Alt键按下,之前按下的那个键释放时调用 |
ON_WM_SYSCHAR | OnSysChar | |
ON_WM_SYSDEADCHAR | OnSysDeadChar | |
ON_WM_SYSCOMMAND | OnSysCommand | |
ON_WM_INPUTLANGCHANGE | OnInputLangChange | 应用程序的输入语言改变后,调用该函数topmost窗口会受影响 |
ON_WM_INPUTLANGCHANGEREQUEST | OnInputLangChangeRequest | 用户选择新的语言时来影响具有焦点的窗口 |
ON_WM_APPCOMMAND | OnAppCommand | |
ON_WM_INPUT | OnRawInput | |
ON_WM_INPUT_DEVICE_CHANGE | OnInputDeviceChange | 当一个IO设备被增加到系统或从系统中移除时 |
ON_WM_TCARD | OnTCard | |
ON_WM_TIMER | OnTimer | 定时器 |
ON_WM_HSCROLL | OnHScroll | 用户点击水平滚动条时调用 |
ON_WM_HSCROLL_REFLECT | HScroll | |
ON_WM_VSCROLL | OnVScroll | 用户点击垂直滚动条时调用 |
ON_WM_VSCROLL_REFLECT | VScroll | |
ON_WM_INITMENU | OnInitMenu | |
ON_WM_INITMENUPOPUP | OnInitMenuPopup | 当一个pop-up菜单将要激活时调用 |
ON_WM_MENUSELECT | OnMenuSelect | 当某个窗口是某个menu中的某项时,当用户选择该项时,该函数会被调用 |
ON_WM_MENUCHAR | OnMenuChar | 菜单项助记符按下 |
ON_WM_MENURBUTTONUP | OnMenuRButtonUp | 鼠标在菜单的某项上,释放鼠标右键按钮时调用 |
ON_WM_MENUDRAG | OnMenuDrag | 用户拖动菜单的某一项时(前提是菜单中的项可拖动) |
ON_WM_MENUGETOBJECT | OnMenuGetObject | 鼠标从菜单的一个项移动到另一个项时调用 |
ON_WM_UNINITMENUPOPUP | OnUnInitMenuPopup | 当一个可拖动菜单项的菜单被销毁时调用 |
ON_WM_NEXTMENU | OnNextMenu | 在menu bar或者系统菜单"<-“或者”->"按下 |
ON_WM_ENTERIDLE | OnEnterIdle | 告诉应用程序的主窗口的window procedure:模态框或者menu正在进入idle状态 |
ON_WM_MOUSEMOVE | OnMouseMove | 鼠标移动到该窗口 |
ON_WM_MOUSEHOVER | OnMouseHover | 鼠标在该窗口上悬停 |
ON_WM_MOUSELEAVE | OnMouseLeave | 鼠标离开该窗口 |
ON_WM_MOUSEWHEEL | OnMouseWheel | 鼠标滚轮滚动,调用窗口的该函数 |
ON_WM_MOUSEHWHEEL | OnMouseHWheel | |
WM_LBUTTONDOWN | OnLButtonDown | 用户按下鼠标左键 |
ON_WM_LBUTTONUP | OnLButtonUp | 用户释放鼠标左边 |
ON_WM_LBUTTONDBLCLK | OnLButtonDblClk | 用户双击鼠标左键 |
ON_WM_RBUTTONDOWN | OnRButtonDown | 用户按下鼠标右键 |
ON_WM_RBUTTONUP | OnRButtonUp | 用户释放鼠标右键 |
ON_WM_RBUTTONDBLCLK | OnRButtonDblClk | 用户双击鼠标右键 |
ON_WM_MBUTTONDOWN | OnMButtonDown | 用户按下鼠标中键 |
ON_WM_MBUTTONUP | OnMButtonUp | 用户释放鼠标中键 |
ON_WM_MBUTTONDBLCLK | OnMButtonDblClk | 用户双击鼠标中键 |
ON_WM_XBUTTONDOWN | OnXButtonDown | 鼠标左右两侧按键被按下 |
ON_WM_XBUTTONUP | OnXButtonUp | 鼠标左右两侧按键被释放 |
ON_WM_XBUTTONDBLCLK | OnXButtonDblClk | 双击鼠标左右两侧按键 |
ON_WM_PARENTNOTIFY | OnParentNotify | 当一个窗口的子窗口被创建或者销毁时,父窗口的该函数被调用 用户在某个子窗口中点击鼠标按钮,其父窗口的该函数被调用 |
ON_WM_PARENTNOTIFY_REFLECT | ParentNotify | |
ON_WM_NOTIFYFORMAT | OnNotifyFormat | 该函数接收WM_NOTIFYFORMAT消息,判断是当前窗口是接受ANSI还是Unicode |
ON_WM_MDIACTIVATE | OnMDIActivate | 在MDI窗口体系中,当子窗口被激活和另一个子窗口失活时调用该函数 |
ON_WM_RENDERFORMAT | OnRenderFormat | |
ON_WM_RENDERALLFORMATS | OnRenderAllFormats | |
ON_WM_DESTROYCLIPBOARD | OnDestroyClipboard | |
ON_WM_DESTROYCLIPBOARD | OnDrawClipboard | |
ON_WM_PAINTCLIPBOARD | OnPaintClipboard | |
ON_WM_VSCROLLCLIPBOARD | OnVScrollClipboard | |
ON_WM_CONTEXTMENU | OnContextMenu | 用户在窗口中按下鼠标右键 |
ON_WM_SIZECLIPBOARD | OnSizeClipboard | |
ON_WM_ASKCBFORMATNAME | OnAskCbFormatName | |
ON_WM_CHANGECBCHAIN | OnChangeCbChain | |
ON_WM_HSCROLLCLIPBOARD | OnHScrollClipboard | |
ON_WM_CLIPBOARDUPDATE | OnClipboardUpdate | |
ON_WM_QUERYNEWPALETTE | OnQueryNewPalette | |
ON_WM_PALETTECHANGED | OnPaletteChanged | |
ON_WM_PALETTEISCHANGING | OnPaletteIsChanging | |
ON_WM_DROPFILES | OnDropFiles | |
ON_WM_WINDOWPOSCHANGING | OnWindowPosChanging | 当一个窗口的大小、位置、z-order即将改变时调用该函数 |
ON_WM_WINDOWPOSCHANGING | OnWindowPosChanged | 当一个窗口的大小、位置、z-order已经改变时调用该函数 |
ON_WM_EXITMENULOOP | OnExitMenuLoop | |
ON_WM_ENTERMENULOOP | OnEnterMenuLoop | |
ON_WM_STYLECHANGED | OnStyleChanged | 窗口的样式发生改变时调用该函数(造成窗口样式发生改变的函数:SetWindowLong) |
ON_WM_STYLECHANGING | OnStyleChanging | 窗口的样式即将发生改变时调用该函数(造成窗口样式发生改变的函数:SetWindowLong) |
ON_WM_SIZING | OnSizing | 该函数调用时表示用户正在改变窗口大小 |
ON_WM_MOVING | OnMoving | 该函数调用时表示用户正在移动窗口位置 |
ON_WM_ENTERSIZEMOVE | OnEnterSizeMove | OnMoving刚开始时调用 |
ON_WM_EXITSIZEMOVE | OnExitSizeMove | OnMoving结束时调用 |
ON_WM_CAPTURECHANGED | OnCaptureChanged | 告诉窗口它已经失去了鼠标捕获(比如鼠标点击了一个新的窗口,那么原窗口就失去了鼠标捕获) |
ON_WM_DEVICECHANGE | OnDeviceChange | 告诉应用程序或者驱动程序:一个设备的硬件配置发生改变 |
ON_WM_POWERBROADCAST | OnPowerBroadcast | 电源管理时间发生时调用该函数 |
ON_WM_USERCHANGED | OnUserChanged | 当用户登录登出时告诉所有窗口调用该函数 |
ON_WM_CHANGEUISTATE | OnChangeUIState | |
ON_WM_UPDATEUISTATE | OnUpdateUIState | |
ON_WM_QUERYUISTATE | OnQueryUIState | |
ON_WM_THEMECHANGED | OnThemeChanged | |
ON_WM_DWMCOMPOSITIONCHANGED | OnCompositionChanged | The framework calls this member function for all top-level windows when the Desktop Window Manager (DWM) composition is enabled or disabled. |
ON_WM_DWMNCRENDERINGCHANGED | OnNcRenderingChanged | |
ON_WM_DWMCOLORIZATIONCOLORCHANGED | OnColorizationColorChanged | |
ON_WM_DWMWINDOWMAXIMIZEDCHANGE | OnWindowMaximizedChanged |
(* ̄(oo) ̄)注:表格中空白之处为当前所不明白之处。强行翻译,并没有任何意思,翻译了也不知道它说的是什么意思。
参考来源: CWnd