クラスにメッセージ ハンドラーを追加するには、両方の部分が必要です。メッセージ マップは、任意のメッセージ ハンドラー関数 (例: ) の宣言と共に、クラス内で宣言する必要がありますOnSize
。
class CClassWnd : public CBaseClassWnd {
...
afx_msg void OnSize(UINT nType, int cx, int cy);
DECLARE_MESSAGE_MAP
};
afx_msg
は単なる空のプレースホルダー マクロです。実際には何もしませんが、慣例により常に含まれています。
メッセージ マップは、クラスの .cpp ファイルで定義されます。
BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
ON_WM_SIZE()
END_MESSAGE_MAP()
これらのマクロは、ウィンドウが受信したメッセージを対応するハンドラ関数にディスパッチできるクラスのルックアップ テーブルを生成します。このON_WM_SIZE
マクロを使用すると、メッセージ内のwParam
およびlParam
メッセージ パラメータをWM_SIZE
、メッセージ ハンドラ関数 (この場合はnType
、cx
、および) にとってより意味のある値にデコードできます。cy
MFC は、ほとんどのウィンドウ メッセージ ( 、 など) 用のマクロを提供しWM_LBUTTONDOWN
ますWM_DESTROY
。
MFC でメッセージ マップがどのように機能するかの詳細については、MSDN を参照してください。