MFC消息 学习笔记

消息映射 (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 成员函数,并传递 pHintlHint。 可使用这些参数将对文档所做修改的相关信息传递给视图。

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;
}

相关推荐
盐焗西兰花7 小时前
鸿蒙学习实战之路:状态管理最佳实践
学习·华为·harmonyos
小毅&Nora9 小时前
【人工智能】【深度学习】 ⑦ 从零开始AI学习路径:从Python到大模型的实战指南
人工智能·深度学习·学习
Maxwell_li19 小时前
Pandas 描述分析和分组分析学习文档
学习·数据分析·numpy·pandas·matplotlib
雷工笔记9 小时前
MES学习笔记之SCADA采集的数据如何与MES中的任务关联起来?
笔记·学习
繁星星繁10 小时前
【C++】脚手架学习笔记 gflags与 gtest
c++·笔记·学习
2301_8107463110 小时前
CKA冲刺40天笔记 - day20-day21 SSL/TLS详解
运维·笔记·网络协议·kubernetes·ssl
Lovely Ruby11 小时前
前端er Go-Frame 的学习笔记:实现 to-do 功能(三),用 docker 封装成镜像,并且同时启动前后端数据库服务
前端·学习·golang
YJlio11 小时前
SDelete 学习笔记(9.18):安全删除、空闲清理与介质回收实战
笔记·学习·安全
74413 小时前
数据结构(C语言版)线性表-单链表的拓展及应用
笔记·强化学习