■メッセージとは
Windowsはメッセージを送ってアプリケーションとやり取りをしている
メッセージはそれぞれ一意の整数値で表される
アプリケーションに送られるメッセージのすべてを処理する必要はなくMFCがデフォルトのメッセージハンドラを提供している
■メッセージへの応答 MFC方式
@ メッセージに対応するメッセージマクロをプログラムのメッセージマップに追加する
メッセージ | メッセージに対応するメッセージマクロ | 備考 |
WM_CHAR | ON_WM_CHAR() | キー操作が非システムキャラクタに変換されたときに ウィンドウにポストされます |
WM_PAINT | ON_WM_PAINT() | 再描画が必要になったとき、Windows がアプリケーションに 送るメッセージ |
WM_MOVE | ON_WM_MOVE() | ウィンドウが移動された直後に送信されます |
WM_CLOSE | ON_WM_CLOSE() | ウィンドウがクローズされようとしているときポストされるメッセージ |
WM_LBUTTONUP | ON_WM_LBUTTONUP() | |
WM_LBUTTONDOWN | ON_WM_LBUTTONDOWN() | |
WM_COMMAND | ON_COMMAND() | |
WM_SIZE | ON_WM_SIZE() |
メッセージマップを追加するには、BEGIN_MESSAGE_MAPとEND_MESSAGE_MAPの間にメッセージマクロを追加する
BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd) OM_WM_CHAR() ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() |
A メッセージハンドラのプロトタイプを、メッセージを処理するウィンドウクラスへ追加する
// メインウィンドウクラス class CMainWin : public CFrameWnd { public: CMainWin(); afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() }; |
一般的にメッセージハンドラはメッセージ名の前にONをつけたもの
メッセージに応答するならプログラムが定義するウィンドウクラスにメッセージハンドルを追加する
afx_msg型指定子を使ってプロトタイプ宣言する
B メッセージに関連付けられたメッセージハンドラを実装する
メッセージハンドラ実装の条件
・処理されるメッセージの性質
・メッセージがプログラムに対して持っている意味