消息映射 (MFC)
| 类别 | 说明 |
|---|---|
ON_COMMAND 消息处理程序 |
处理用户菜单选择或菜单访问键生成的 WM_COMMAND 消息。 |
| 子窗口通知消息处理程序 | 处理子窗口中的通知消息。 |
| WM_消息处理程序 | 处理 WM_ 消息,例如 WM_PAINT。 |
| 用户定义的消息处理程序 | 处理用户定义消息。 |
子窗口通知消息处理程序
| 映射条目 | 函数原型 |
|---|---|
| ON_CONTROL( <wNotifyCode>, <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| 映射条目 | 函数原型 |
|---|---|
| ON_BN_CLICKED( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_BN_DISABLE( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_BN_DOUBLECLICKED( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_BN_HILITE( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_BN_PAINT( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_BN_UNHILITE( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| 映射条目 | 函数原型 |
|---|---|
| ON_CBN_CLOSEUP( <id>, <memberFxn> ) | afx_msg void memberFxn( ) |
| ON_CBN_DBLCLK( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_CBN_DROPDOWN( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_CBN_EDITCHANGE( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_CBN_EDITUPDATE( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_CBN_ERRSPACE( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_CBN_KILLFOCUS( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_CBN_SELCHANGE( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_CBN_SELENDCANCEL( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_CBN_SELENDOK( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_CBN_SETFOCUS( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| 映射条目 | 函数原型 |
|---|---|
| ON_EN_CHANGE( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_EN_ERRSPACE( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_EN_HSCROLL( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_EN_KILLFOCUS( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_EN_MAXTEXT( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_EN_SETFOCUS( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_EN_UPDATE( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_EN_VSCROLL( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| 映射条目 | 函数原型 |
|---|---|
| ON_LBN_DBLCLK( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_LBN_ERRSPACE( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_LBN_KILLFOCUS( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_LBN_SELCHANGE( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
| ON_LBN_SETFOCUS( <id>, <memberFxn> ) | afx_msg void memberFxn( ); |
WM_ 消息的处理程序
| 映射条目 | 函数原型 |
|---|---|
ON_WM_ACTIVATE() |
afx_msg void OnActivate(UINT, CWnd*, BOOL); |
ON_WM_ACTIVATEAPP() |
afx_msg void OnActivateApp(BOOL, DWORD); |
ON_WM_APPCOMMAND() |
afx_msg void OnAppCommand(CWnd*, UINT, UINT, UINT); |
ON_WM_ASKCBFORMATNAME() |
afx_msg void OnAskCbFormatName(UINT, LPSTR); |
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, CWnd*, UINT); |
ON_WM_CHILDACTIVATE() |
afx_msg void OnChildActivate(); |
ON_WM_CLIPBOARDUPDATE() |
afx_msg void OnClipboardUpdate(); |
ON_WM_CLOSE() |
afx_msg void OnClose(); |
ON_WM_COMPACTING() |
afx_msg void OnCompacting(UINT); |
ON_WM_COMPAREITEM() |
afx_msg int OnCompareItem(LPCOMPAREITEMSTRUCT); |
ON_WM_CONTEXTMENU() |
afx_msg void OnContextMenu(CWnd*, CPoint); |
ON_WM_COPYDATA() |
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct); |
ON_WM_CREATE() |
afx_msg int OnCreate(LPCREATESTRUCT); |
ON_WM_CTLCOLOR() |
afx_msg HBRUSH OnCtlColor(CDC*, CWnd*, UINT); |
| 映射条目 | 函数原型 |
|---|---|
| ON_WM_DEADCHAR() | afx_msg void OnDeadChar(UINT, UINT, UINT); |
| ON_WM_DELETEITEM() | afx_msg void OnDeleteItem(int, LPDELETEITEMSTRUCT); |
| ON_WM_DESTROY() | afx_msg void OnDestroy(); |
| ON_WM_DESTROYCLIPBOARD() | afx_msg void OnDestroyClipboard(); |
| ON_WM_DEVICECHANGE() | afx_msg void OnDeviceChange(UINT, DWORD); |
| ON_WM_DEVMODECHANGE() | afx_msg void OnDevModeChange(LPSTR); |
| ON_WM_DRAWCLIPBOARD() | afx_msg void OnDrawClipboard(); |
| ON_WM_DRAWITEM() | afx_msg void OnDrawItem(LPDRAWITEMSTRUCT); |
| ON_WM_DROPFILES() | afx_msg void OnDropFiles(HDROP); |
| ON_WM_DWMCOLORIZATIONCOLORCHANGED() | afx_msg void OnColorizationColorChanged(DWORD, BOOL); |
| ON_WM_DWMCOMPOSITIONCHANGED() | afx_msg void OnCompositionChanged(); |
| ON_WM_DWMNCRENDERINGCHANGED() | afx_msg void OnNcRenderingChanged(BOOL); |
| ON_WM_DWMWINDOWMAXIMIZEDCHANGE() | afx_msg void OnWindowMaximizedChanged(BOOL); |
| 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_ENTERSIZEMOVE() | afx_msg void OnEnterSizeMove(); |
| ON_WM_ERASEBKGND() | afx_msg BOOL OnEraseBkgnd(CDC*); |
| ON_WM_EXITSIZEMOVE() | afx_msg void OnExitSizeMove(); |
| 映射条目 | 函数原型 |
|---|---|
| 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_HOTKEY() | afx_msg void OnHotKey(UINT, UINT, UINT); |
| ON_WM_HSCROLL() | afx_msg void OnHScroll(UINT, UINT, CWnd*); |
| 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_INPUT() | afx_msg void OnRawInput(UINT, HRAWINPUT); |
| ON_WM_INPUT_DEVICE_CHANGE() | afx_msg void OnInputDeviceChange(unsigned short); |
| ON_WM_INPUTLANGCHANGE() | afx_msg void OnInputLangChange(BYTE, UINT); |
| ON_WM_INPUTLANGCHANGEREQUEST() | afx_msg void OnInputLangChangeRequest(UINT, HKL); |
| 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(LPMEASUREITEMSTRUCT); |
| ON_WM_MENUCHAR() | afx_msg LONG OnMenuChar(UINT, UINT, CMenu*); |
| ON_WM_MENUDRAG() | afx_msg UINT OnMenuDrag(UINT, CMenu*); |
| ON_WM_MENUGETOBJECT() | afx_msg UINT OnMenuGetObject(MENUGETOBJECTINFO*); |
| ON_WM_MENURBUTTONUP() | afx_msg void OnMenuRButtonUp(UINT, CMenu*); |
| ON_WM_MENUSELECT() | afx_msg void OnMenuSelect(UINT, UINT, HMENU); |
| ON_WM_MOUSEACTIVATE() | afx_msg int OnMouseActivate( CWnd*, UINT, UINT ); |
| ON_WM_MOUSEHOVER() | afx_msg void OnMouseHover(UINT, CPoint); |
| ON_WM_MOUSEHWHEEL() | afx_msg void OnMouseHWheel(UINT, short, CPoint); |
| ON_WM_MOUSELEAVE() | afx_msg void OnMouseLeave(); |
| 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 FAR*); |
| ON_WM_NCCREATE() | afx_msg BOOL OnNcCreate(LPCREATESTRUCT); |
| ON_WM_NCDESTROY() | afx_msg void OnNcDestroy(); |
| ON_WM_NCHITTEST() | afx_msg LRESULT 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_NCMOUSEHOVER() | afx_msg void OnNcMouseHover(UINT, CPoint); |
| ON_WM_NCMOUSELEAVE() | afx_msg void OnNcMouseLeave(); |
| 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_NCXBUTTONDBLCLK() | void OnNcXButtonDblClk(short, UINT, CPoint); |
| ON_WM_NCXBUTTONDOWN() | afx_msg void OnNcXButtonDown(short, UINT, CPoint); |
| ON_WM_NCXBUTTONUP() | afx_msg void OnNcXButtonUp(short, UINT, CPoint); |
| ON_WM_NEXTMENU() | afx_msg void OnNextMenu(UINT, LPMDINEXTMENU); |
| ON_WM_NOTIFYFORMAT() | afx_msg UINT OnNotifyFormat(CWnd*, UINT); |
| 映射条目 | 函数原型 |
|---|---|
| ON_WM_PAINT() | afx_msg void OnPaint(); |
| ON_WM_PAINTCLIPBOARD() | afx_msg void OnPaintClipboard( CWnd*, HANDLE ); |
| ON_WM_PALETTECHANGED() | afx_msg void OnPaletteChanged( CWnd* ); |
| ON_WM_PALETTEISCHANGING() | afx_msg void OnPaletteIsChanging( CWnd* ); |
| ON_WM_PARENTNOTIFY() | afx_msg void OnParentNotify( UINT, LONG ); |
| ON_WM_POWERBROADCAST() | afx_msg UINT OnPowerBroadcast( UINT, UINT ); |
| 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 uFlags, LPCTSTR lpszSection ); |
| 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*, HANDLE ); |
| 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, LONG ); |
| 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_PTR ); |
| ON_WM_UNICHAR() | afx_msg void OnUniChar( UINT, UINT, UINT ); |
| ON_WM_UNINITMENUPOPUP() | afx_msg void OnUnInitMenuPopup( CMenu*, UINT ); |
| ON_WM_USERCHANGED() | afx_msg void OnUserChanged(); |
| ON_WM_VKEYTOITEM() | afx_msg int OnVKeyToItem( UINT, CWnd*, UINT ); |
| ON_WM_VSCROLL() | afx_msg void OnVScroll( UINT, UINT, CWnd* ); |
| 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( LPSTR ); |
| ON_WM_WTSSESSION_CHANGE() | afx_msg void OnSessionChange( UINT, UINT ); |
| ON_WM_XBUTTONDBLCLK() | afx_msg void OnXButtonDblClk( UINT, UINT, CPoint ); |
| ON_WM_XBUTTONDOWN() | afx_msg void OnXButtonDown( UINT, UINT, CPoint ); |
| ON_WM_XBUTTONUP() | afx_msg void OnXButtonUp( UINT, UINT, CPoint ); |
ON_WM_TIMER()
由CWnd::SetTimer触发
cpp
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer)(HWND,
UINT,
UINT_PTR,
DWORD));
ON_WM_PAINT()
以下会触发ON_WM_PAINT()
CWnd::UpdateWindow
如果更新区域不为空,则通过发送 WM_PAINT 消息来更新工作区。
cpp
void UpdateWindow();
CWnd::RedrawWindow
更新给定窗口工作区中的指定矩形或区域。
cpp
BOOL RedrawWindow(
LPCRECT lpRectUpdate = NULL,
CRgn* prgnUpdate = NULL,
UINT flags = RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
CWnd::Invalidate
使 CWnd 的整个工作区失效。
cpp
void Invalidate(BOOL bErase = TRUE);
CWnd::InvalidateRect
通过将给定矩形添加到 CWnd 更新区域,使给定矩形中的工作区失效。
cpp
void InvalidateRect(
LPCRECT lpRect,
BOOL bErase = TRUE);
CWnd::InvalidateRgn
通过将给定区域中的工作区添加到 CWnd 的当前更新区域来使其失效。
cpp
void InvalidateRgn(
CRgn* pRgn,
BOOL bErase = TRUE);
文档更新后更新视图

在CView中的OnUpdate更新视区域,如用InvalidateRect();
CDocument::UpdateAllViews
修改文档后调用此函数。
cpp
void UpdateAllViews(CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL);
此函数为每个文档视图(发送视图除外)调用 CView::OnUpdate 成员函数,并传递 pHint 和 lHint。 可使用这些参数将对文档所做修改的相关信息传递给视图。
CView::OnUpdate
在修改视图的文档之后由框架调用;此函数由 CDocument::UpdateAllViews 调用,并允许视图更新其显示以反映这些修改。
cpp
virtual void OnUpdate(CView* pSender, LPARAM lHint,CObject* pHint);
它还由 OnInitialUpdate 的默认实现调用。默认实现使整个工作区失效,在收到下一条 WM_PAINT 消息时将其标记为绘制。 如果要仅更新映射到文档修改部分的区域,请重写此函数。 为此,必须使用提示参数传递有关修改的信息。
CView::OnInitialUpdate
在视图首次附加到文档之后但在最初显示视图之前,由框架调用。
cpp
virtual void OnInitialUpdate();
此函数的默认实现调用不带提示信息的 OnUpdate 成员函数(即,对于 lHint 参数,使用默认值 0,对于 pHint 参数,使用 NULL)。 重写此函数以执行任何需要文档信息的一次性初始化。 例如,如果应用程序具有固定大小的文档,则可以使用此函数根据文档大小初始化视图的滚动限制。 如果应用程序支持可变大小的文档,则使用 OnUpdate 在每次文档更改时更新滚动限制。
用户定义的处理程序
| 映射条目 | 函数原型 |
|---|---|
| ON_MESSAGE( <message>, <memberFxn> ) | afx_msg LRESULT memberFxn( WPARAM, LPARAM ); |
| ON_REGISTERED_MESSAGE( <nMessageVariable>, <memberFxn> ) | afx_msg LRESULT memberFxn( WPARAM, LPARAM ); |
| ON_THREAD_MESSAGE( <message>, <memberFxn> ) | afx_msg void memberFxn( WPARAM, LPARAM ); |
| ON_REGISTERED_THREAD_MESSAGE( <nMessageVariable>, <memberFxn> ) | afx_msg void memberFxn( WPARAM, LPARAM ); |
CWnd::PostMessage
将消息放入窗口的消息队列中,然后返回且不等待相应的窗口处理消息。(放入消息队列)
cpp
BOOL PostMessage(UINT message, WPARAM wParam = 0, LPARAM lParam = 0);
CWnd::SendMessage
将指定的消息发送到此窗口。(立即执行)
cpp
LRESULT SendMessage(UINT message, WPARAM wParam = 0, LPARAM lParam = 0);
范例










cpp
LRESULT CMFCTest4Dlg::OnUserMessage1(WPARAM wParam, LPARAM lParam)
{
AfxMessageBox(L"OnUserMessage1");
return 0;
}

