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_MAP と END_MSG_MAPの 1 個のインスタンスが一つある必要があります。
COMMAND_HANDLERに加えて、識別子またはコードに関係なく WM_COMMAND のメッセージをマップするために MESSAGE_HANDLER を使用できます。この場合、MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction) は OnHandlerFunctionに WM_COMMAND のすべてのメッセージを表示します。
ATL にメッセージ マップを使用する方法の詳細については、[メッセージ マップ]を参照してください。
必要条件
Header: atlwin.h