次の方法で共有


COMMAND_HANDLER

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

COMMAND_HANDLER( id, code, func )

パラメーター

  • id
    [入力]メニュー項目、コントロール、またはアクセラレータの 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 が呼び出されます。CommandHandler が完全にメッセージを処理しない限り、FALSE にメッセージがさらに処理する必要があることを示すために bHandled を設定する必要があります。

[!メモ]

BEGIN_MSG_MAPからメッセージ マップを常に開始します。次 ALT_MSG_MAPの後続の代替メッセージ マップを宣言できます。END_MSG_MAP のマクロは、メッセージ マップの末尾を示します。各メッセージ マップでは、BEGIN_MSG_MAPEND_MSG_MAPの 1 個のインスタンスが一つある必要があります。

COMMAND_HANDLERに加えて、識別子またはコードに関係なく WM_COMMAND のメッセージをマップするために MESSAGE_HANDLER を使用できます。この場合、MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction) は OnHandlerFunctionに WM_COMMAND のすべてのメッセージを表示します。

ATL にメッセージ マップを使用する方法の詳細については、[メッセージ マップ]を参照してください。

必要条件

Header: atlwin.h

参照

関連項目

COMMAND_ID_HANDLER

COMMAND_CODE_HANDLER

COMMAND_RANGE_HANDLER

NOTIFY_HANDLER

その他の技術情報

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

ATL マクロ