次の方法で共有


COMMAND_HANDLER

更新 : 2007 年 11 月

メッセージ マップにエントリを定義します。

COMMAND_HANDLER( id, code, func )

パラメータ

  • id
    [入力] メニュー項目、コントロール、またはアクセラレータの識別子。

  • code
    [入力] 通知コード。

  • func
    [入力] メッセージ ハンドラ関数の名前。

解説

COMMAND_HANDLER は、通知コードとコントロール ID に基づいて、WM_COMMAND メッセージを指定されたハンドラ関数に割り当てます。次に例を示します。

class ATL_NO_VTABLE CPolyProp :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CPolyProp, &CLSID_PolyProp>,
   public IPropertyPageImpl<CPolyProp>,
   public CDialogImpl<CPolyProp>
{
public:
BEGIN_COM_MAP(CPolyProp)
   COM_INTERFACE_ENTRY(IPropertyPage)
END_COM_MAP()

BEGIN_MSG_MAP(CPolyProp)
   COMMAND_HANDLER(IDC_SIDES, EN_CHANGE, OnEnChangeSides)
   CHAIN_MSG_MAP(IPropertyPageImpl<CPolyProp>)
END_MSG_MAP()

   // When a CPolyProp object receives a WM_COMMAND message identified 
   // by IDC_SIDES and EN_CHANGE, the message is directed to 
   // CPolyProp::OnEnChangeSides for the actual processing.
   LRESULT OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, 
      BOOL& /*bHandled*/);

COMMAND_HANDLER マクロに指定する関数は、すべて次のように定義する必要があります。

LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);

CommandHandler が呼び出される前に、メッセージ マップでは bHandled が TRUE に設定されます。CommandHandler は、メッセージをすべて処理できない場合、bHandled を FALSE に設定して、メッセージ処理がさらに必要であることを示す必要があります。

xsxbs7hc.alert_note(ja-jp,VS.90).gifメモ :

メッセージ マップは、常に BEGIN_MSG_MAP で開始します。開始した後、ALT_MSG_MAP を使って、さらに代替メッセージ マップを宣言することもできます。END_MSG_MAP マクロは、メッセージ マップの終了位置を示します。どのメッセージ マップにも、BEGIN_MSG_MAPEND_MSG_MAP のインスタンスが 1 つずつ生成されている必要があります。

COMMAND_HANDLER のほかに、MESSAGE_HANDLER を使用して、ID やコードに関係なく、WM_COMMAND メッセージを割り当てることもできます。この場合、MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction) は、すべての WM_COMMAND メッセージを OnHandlerFunction に送ります。

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

必要条件

ヘッダー : atlwin.h

参照

参照

COMMAND_ID_HANDLER

COMMAND_CODE_HANDLER

COMMAND_RANGE_HANDLER

NOTIFY_HANDLER

その他の技術情報

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

ATL マクロ