ウィンドウ メッセージ (Windows Message)

メッセージへの応答

メッセージに応答するには、次の手順を実行する必要があります。

  1. メッセージに対応するメッセージマクロを、プログラムのメッセージマップに追加する。
  2. メッセージハンドラ宣言を、メッセージを処理するウィンドウクラスに追加する。
  3. メッセージに関連付けられたメッセージハンドラ定義する。
メッセージマクロ
メッセージマップがどのウィンドウに属するかの指定
メッセージマップ (マップ エントリ)
メッセージとそれを処理する関数を対応付けるマクロ
メッセージハンドラ (関数プロトタイプ)
メッセージを処理する関数
メッセージとそれに対応するメッセージマクロ、メッセージハンドラの例
メッセージ メッセージマクロ メッセージハンドラ
WM_CREATE ON_WM_CREATE() afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct)
WM_PAINT ON_WM_PAINT() afx_msg void OnPaint()

メッセージマップへの、メッセージマクロの追加

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_WM_CREATE()   // メッセージマクロ
    ON_WM_PAINT()    //
END_MESSAGE_MAP()
メッセージ マップ (MFC) | MSDN

BEGIN_MESSAGE_MAPのパラメータでは、メッセージマップがどのウィンドウに属するかを指定します。

BEGIN_MESSAGE_MAP( マップが属するクラス名, マップが属するクラスの基本クラス名 )
BEGIN_MESSAGE_MAP | MSDN

ウィンドウクラスへの、メッセージハンドラの追加

メッセージハンドラのプロトタイプを、クラス宣言に記述します。

class CMainFrame : public CFrameWnd
{
    CMainFrame();

protected:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); // メッセージハンドラ
    afx_msg void OnPaint();                              //

    DECLARE_MESSAGE_MAP()
};

メッセージハンドラは、afx_msg型指定子を使用して宣言します。またメッセージマップを宣言するクラスは、末尾にDECLARE_MESSAGE_MAPマクロを記述する必要があります。

メッセージハンドラの実装

メッセージハンドラのプロトタイプに従い、メッセージハンドラ自体を定義します。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    return 0;
}

メッセージハンドラ (関数プロトタイプ)

マップエントリ 関数プロトタイプ
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(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(LPPOINT);
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 );
WM_ Message Handlers: A - C | MSDN

参考

参考書

Microsoft Learnから検索