次の方法で共有


BEGIN_MSG_MAP

更新 : 2007 年 11 月

既定のメッセージ マップの開始位置を示します。

BEGIN_MSG_MAP( theClass )

パラメータ

  • theClass
    [入力] メッセージ マップを含んでいるクラスの名前。

解説

CWindowImpl::WindowProc は、既定のメッセージ マップを使用して、ウィンドウに送られたメッセージを処理します。メッセージ マップは、適切なハンドラ関数または別のメッセージ マップにメッセージを送ります。

次のマクロは、メッセージをハンドラ関数に割り当てます。このハンドラ関数は、theClass に定義する必要があります。

マクロ

説明

MESSAGE_HANDLER

Windows メッセージをハンドラ関数に割り当てます。

MESSAGE_RANGE_HANDLER

連続した範囲の Windows メッセージをハンドラ関数に割り当てます。

COMMAND_HANDLER

通知コードと、メニュー項目、コントロール、またはアクセラレータの ID に基づいて、WM_COMMAND メッセージをハンドラ関数に割り当てます。

COMMAND_ID_HANDLER

メニュー項目、コントロール、またはアクセラレータの ID に基づいて、WM_COMMAND メッセージをハンドラ関数に割り当てます。

COMMAND_CODE_HANDLER

通知コードに基づいて、WM_COMMAND メッセージをハンドラ関数に割り当てます。

COMMAND_RANGE_HANDLER

メニュー項目、コントロール、またはアクセラレータの ID に基づいて、連続した範囲の WM_COMMAND メッセージをハンドラ関数に割り当てます。

NOTIFY_HANDLER

通知コードとコントロール ID に基づいて、WM_NOTIFY メッセージをハンドラ関数に割り当てます。

NOTIFY_ID_HANDLER

コントロール ID に基づいて、WM_NOTIFY メッセージをハンドラ関数に割り当てます。

NOTIFY_CODE_HANDLER

通知コードに基づいて、WM_NOTIFY メッセージをハンドラ関数に割り当てます。

NOTIFY_RANGE_HANDLER

コントロール ID に基づいて、連続した範囲の WM_NOTIFY メッセージをハンドラ関数に割り当てます。

次のマクロは、メッセージを別のメッセージ マップに送ります。この処理は "チェイン" と呼ばれます。

マクロ

説明

CHAIN_MSG_MAP

基本クラスの既定のメッセージ マップにチェインします。

CHAIN_MSG_MAP_MEMBER

クラスのデータ メンバの既定のメッセージ マップにチェインします。

CHAIN_MSG_MAP_ALT

基本クラスの代替メッセージ マップにチェインします。

CHAIN_MSG_MAP_ALT_MEMBER

クラスのデータ メンバの代替メッセージ マップにチェインします。

CHAIN_MSG_MAP_DYNAMIC

実行時に別のクラスの既定のメッセージ マップにチェインします。

次のマクロは、親ウィンドウから "返送された" メッセージを送ります。たとえば、通常、コントロールは親ウィンドウに処理のための通知メッセージを送りますが、親ウィンドウはメッセージをコントロールに返送できます。

マクロ

説明

REFLECTED_COMMAND_HANDLER

通知コードと、メニュー項目、コントロール、またはアクセラレータの ID に基づいて、返送された WM_COMMAND メッセージをハンドラ関数に割り当てます。

REFLECTED_COMMAND_ID_HANDLER

メニュー項目、コントロール、またはアクセラレータの ID に基づいて、返送された WM_COMMAND メッセージをハンドラ関数に割り当てます。

REFLECTED_COMMAND_CODE_HANDLER

通知コードに基づいて、返送された WM_COMMAND メッセージをハンドラ関数に割り当てます。

REFLECTED_COMMAND_RANGE_HANDLER

連続した範囲のコントロール ID に基づいて、返送された WM_COMMAND メッセージをハンドラ関数に割り当てます。

REFLECTED_COMMAND_RANGE_CODE_HANDLER

通知コードと、連続した範囲のコントロール ID に基づいて、返送された WM_COMMAND メッセージをハンドラ関数に割り当てます。

REFLECTED_NOTIFY_HANDLER

通知コードとコントロール ID に基づいて、返送された WM_NOTIFY メッセージをハンドラ関数に割り当てます。

REFLECTED_NOTIFY_ID_HANDLER

コントロール ID に基づいて、返送された WM_NOTIFY メッセージをハンドラ関数に割り当てます。

REFLECTED_NOTIFY_CODE_HANDLER

通知コードに基づいて、返送された WM_NOTIFY メッセージをハンドラ関数に割り当てます。

REFLECTED_NOTIFY_RANGE_HANDLER

連続した範囲のコントロール ID に基づいて、返送された WM_NOTIFY メッセージをハンドラ関数に割り当てます。

REFLECTED_NOTIFY_RANGE_CODE_HANDLER

通知コードおよび連続した範囲のコントロール ID に基づいて、返送された WM_NOTIFY メッセージをハンドラ関数に割り当てます。

使用例

class CMyExtWindow : public CMyBaseWindow
{
public:
   BEGIN_MSG_MAP(CMyExtWindow)
      MESSAGE_HANDLER(WM_PAINT, OnPaint)
      MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
      CHAIN_MSG_MAP(CMyBaseWindow)
   END_MSG_MAP()

   LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      return 0;   
   }

   LRESULT OnSetFocus(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/) 
   {
      return 0;   
   }
};

CMyExtWindow オブジェクトは、WM_PAINT メッセージを受け取ると、実際の処理のためにそのメッセージを CMyExtWindow::OnPaint に転送します。メッセージは、ここで実際に処理され、さらなる処理が必要な場合は、CMyBaseWindow の既定のメッセージ マップに送られます。

既定のメッセージ マップのほか、ALT_MSG_MAP マクロを使用して代替メッセージ マップを定義することもできます。メッセージ マップは、常に BEGIN_MSG_MAP で開始します。メッセージ マップの開始後、さらに代替メッセージ マップを宣言できます。次の例は、既定のメッセージ マップと 1 つの代替メッセージ マップを示しています。各メッセージ マップには、1 つのハンドラ関数が含まれています。

BEGIN_MSG_MAP(CMyOneAltClass)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()

次の例は、2 つの代替メッセージ マップを示しています。既定のメッセージ マップは空です。

BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()

END_MSG_MAP マクロは、メッセージ マップの終了位置を示します。BEGIN_MSG_MAPEND_MSG_MAP のインスタンスは、常に 1 つずつ存在することに注意してください。

ATL でのメッセージ マップの使い方の詳細については、「メッセージ マップ」を参照してください。

必要条件

ヘッダー : atlwin.h

参照

参照

CMessageMap クラス

CDynamicChain クラス

その他の技術情報

メッセージ マップ マクロ (ATL)

ATL マクロ