メッセージ マップ マクロ (ATL)
これらのマクロでは、メッセージ マップおよびエントリを定義します。
名前 | 説明 |
---|---|
ALT_MSG_MAP | 代替メッセージ マップの先頭をマークします。 |
BEGIN_MSG_MAP | 既定のメッセージ マップの先頭をマークします。 |
CHAIN_MSG_MAP_ALT | 基本クラスの代替メッセージ マップにチェーンします。 |
CHAIN_MSG_MAP_ALT_MEMBER | クラスのデータ メンバー内の代替メッセージ マップにチェーンします。 |
CHAIN_MSG_MAP | 基本クラスの既定のメッセージ マップにチェーンします。 |
CHAIN_MSG_MAP_DYNAMIC | 実行時に別のクラスのメッセージ マップにチェーンします。 |
CHAIN_MSG_MAP_MEMBER | クラスのデータ メンバー内の既定のメッセージ マップにチェーンします。 |
COMMAND_CODE_HANDLER | 通知コードに基づいて、WM_COMMAND メッセージをハンドラー関数にマップします。 |
COMMAND_HANDLER | 通知コードと、メニュー項目、コントロール、またはアクセラレータの識別子に基づいて、WM_COMMAND メッセージをハンドラー関数にマップします。 |
COMMAND_ID_HANDLER | メニュー項目、コントロール、またはアクセラレータの識別子に基づいて、WM_COMMAND メッセージをハンドラー関数にマップします。 |
COMMAND_RANGE_CODE_HANDLER | 通知コードと、連続する範囲のコントロール識別子に基づいて、WM_COMMAND メッセージをハンドラー関数にマップします。 |
COMMAND_RANGE_HANDLER | 連続する範囲のコントロール識別子に基づいて、WM_COMMAND メッセージをハンドラー関数にマップします。 |
DECLARE_EMPTY_MSG_MAP | 空のメッセージ マップを実装します。 |
DEFAULT_REFLECTION_HANDLER | このマクロなしには処理されない、反映されたメッセージの既定のハンドラーを指定します。 |
END_MSG_MAP | メッセージ マップの末尾をマークします。 |
FORWARD_NOTIFICATIONS | 通知メッセージを親ウィンドウに転送します。 |
MESSAGE_HANDLER | Windows メッセージをハンドラー関数にマップします。 |
MESSAGE_RANGE_HANDLER | 連続する範囲の Windows メッセージをハンドラー関数にマップします。 |
NOTIFY_CODE_HANDLER | 通知コードに基づいて、WM_NOTIFY メッセージをハンドラー関数にマップします。 |
NOTIFY_HANDLER | 通知コードとコントロール識別子に基づいて、WM_NOTIFY メッセージをハンドラー関数にマップします。 |
NOTIFY_ID_HANDLER | コントロール識別子に基づいて、WM_NOTIFY メッセージをハンドラー関数にマップします。 |
NOTIFY_RANGE_CODE_HANDLER | 通知コードと、連続する範囲のコントロール識別子に基づいて、WM_NOTIFY メッセージをハンドラー関数にマップします。 |
NOTIFY_RANGE_HANDLER | 連続する範囲のコントロール識別子に基づいて、WM_NOTIFY メッセージをハンドラー関数にマップします。 |
REFLECT_NOTIFICATIONS | 通知メッセージを送信元のウィンドウに反映します。 |
REFLECTED_COMMAND_CODE_HANDLER | 通知コードに基づいて、反映された WM_COMMAND メッセージをハンドラー関数にマップします。 |
REFLECTED_COMMAND_HANDLER | 通知コードと、メニュー項目、コントロール、またはアクセラレータの識別子に基づいて、反映された WM_COMMAND メッセージをハンドラー関数にマップします。 |
REFLECTED_COMMAND_ID_HANDLER | メニュー項目、コントロール、またはアクセラレータの識別子に基づいて、反映された WM_COMMAND メッセージをハンドラー関数にマップします。 |
REFLECTED_COMMAND_RANGE_CODE_HANDLER | 通知コードと、連続する範囲のコントロール識別子に基づいて、反映された WM_COMMAND メッセージをハンドラー関数にマップします。 |
REFLECTED_COMMAND_RANGE_HANDLER | 連続する範囲のコントロール識別子に基づいて、反映された WM_COMMAND メッセージをハンドラー関数にマップします。 |
REFLECTED_NOTIFY_CODE_HANDLER | 通知コードに基づいて、反映された WM_NOTIFY メッセージをハンドラー関数にマップします。 |
REFLECTED_NOTIFY_HANDLER | 通知コードとコントロール識別子に基づいて、反映された WM_NOTIFY メッセージをハンドラー関数にマップします。 |
REFLECTED_NOTIFY_ID_HANDLER | コントロール識別子に基づいて、反映された WM_NOTIFY メッセージをハンドラー関数にマップします。 |
REFLECTED_NOTIFY_RANGE_CODE_HANDLER | 通知コードと、連続する範囲のコントロール識別子に基づいて、反映された WM_NOTIFY メッセージをハンドラー関数にマップします。 |
REFLECTED_NOTIFY_RANGE_HANDLER | 連続する範囲のコントロール識別子に基づいて、反映された WM_NOTIFY メッセージをハンドラー関数にマップします。 |
要件
ヘッダー: atlwin.h
ALT_MSG_MAP
代替メッセージ マップの先頭をマークします。
ALT_MSG_MAP(msgMapID)
パラメーター
msgMapID
[入力] メッセージ マップの識別子。
解説
ATL では、各メッセージ マップが数値で識別されます。 既定のメッセージ マップ (BEGIN_MSG_MAP マクロで宣言されます) は 0 で識別されます。 代替メッセージ マップは、msgMapID で識別されます。
メッセージ マップは、ウィンドウに送信されるメッセージを処理するのに使用されます。 たとえば、CContainedWindow を使用すると、含まれているオブジェクト内のメッセージ マップの識別子を指定できます。 CContainedWindow::WindowProc では、その後、このメッセージ マップを使用して、含まれているウィンドウのメッセージを適切なハンドラー関数または別のメッセージ マップに送信します。 ハンドラー関数を宣言するマクロの一覧については、「BEGIN_MSG_MAP」を参照してください。
メッセージ マップは、常に BEGIN_MSG_MAP から開始します。 その後、後続の代替メッセージ マップを宣言できます。
END_MSG_MAP マクロでは、メッセージ マップの末尾をマークします。 BEGIN_MSG_MAP と END_MSG_MAP のインスタンスは常に 1 つだけです。
ATL でメッセージ マップを使用する方法の詳細については、「メッセージ マップ」を参照してください。
例
次の例は、既定のメッセージ マップと 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()
要件
ヘッダー: atlwin.h
BEGIN_MSG_MAP
既定のメッセージ マップの先頭をマークします。
BEGIN_MSG_MAP(theClass)
パラメーター
theClass
[入力] メッセージ マップを含むクラスの名前。
解説
CWindowImpl::WindowProc では、既定のメッセージ マップを使用して、ウィンドウに送信されたメッセージを処理します。 メッセージ マップにより、メッセージが適切なハンドラー関数または別のメッセージ マップに送信されます。
次のマクロでは、メッセージをハンドラー関数にマップします。 この関数は、theClass で定義する必要があります。
マクロ | 説明 |
---|---|
MESSAGE_HANDLER | Windows メッセージをハンドラー関数にマップします。 |
MESSAGE_RANGE_HANDLER | 連続する範囲の Windows メッセージをハンドラー関数にマップします。 |
COMMAND_HANDLER | 通知コードと、メニュー項目、コントロール、またはアクセラレータの識別子に基づいて、WM_COMMAND メッセージをハンドラー関数にマップします。 |
COMMAND_ID_HANDLER | メニュー項目、コントロール、またはアクセラレータの識別子に基づいて、WM_COMMAND メッセージをハンドラー関数にマップします。 |
COMMAND_CODE_HANDLER | 通知コードに基づいて、WM_COMMAND メッセージをハンドラー関数にマップします。 |
COMMAND_RANGE_HANDLER | メニュー項目、コントロール、またはアクセラレータの識別子に基づいて、連続する範囲の WM_COMMAND メッセージをハンドラー関数にマップします。 |
NOTIFY_HANDLER | 通知コードとコントロール識別子に基づいて、WM_NOTIFY メッセージをハンドラー関数にマップします。 |
NOTIFY_ID_HANDLER | コントロール識別子に基づいて、WM_NOTIFY メッセージをハンドラー関数にマップします。 |
NOTIFY_CODE_HANDLER | 通知コードに基づいて、WM_NOTIFY メッセージをハンドラー関数にマップします。 |
NOTIFY_RANGE_HANDLER | コントロール識別子に基づいて、連続する範囲の 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 | 通知コードと、メニュー項目、コントロール、またはアクセラレータの識別子に基づいて、反映された WM_COMMAND メッセージをハンドラー関数にマップします。 |
REFLECTED_COMMAND_ID_HANDLER | メニュー項目、コントロール、またはアクセラレータの識別子に基づいて、反映された WM_COMMAND メッセージをハンドラー関数にマップします。 |
REFLECTED_COMMAND_CODE_HANDLER | 通知コードに基づいて、反映された WM_COMMAND メッセージをハンドラー関数にマップします。 |
REFLECTED_COMMAND_RANGE_HANDLER | 連続する範囲のコントロール識別子に基づいて、反映された WM_COMMAND メッセージをハンドラー関数にマップします。 |
REFLECTED_COMMAND_RANGE_CODE_HANDLER | 通知コードと、連続する範囲のコントロール識別子に基づいて、反映された WM_COMMAND メッセージをハンドラー関数にマップします。 |
REFLECTED_NOTIFY_HANDLER | 通知コードとコントロール識別子に基づいて、反映された WM_NOTIFY メッセージをハンドラー関数にマップします。 |
REFLECTED_NOTIFY_ID_HANDLER | コントロール識別子に基づいて、反映された WM_NOTIFY メッセージをハンドラー関数にマップします。 |
REFLECTED_NOTIFY_CODE_HANDLER | 通知コードに基づいて、反映された WM_NOTIFY メッセージをハンドラー関数にマップします。 |
REFLECTED_NOTIFY_RANGE_HANDLER | 連続する範囲のコントロール識別子に基づいて、反映された WM_NOTIFY メッセージをハンドラー関数にマップします。 |
REFLECTED_NOTIFY_RANGE_CODE_HANDLER | 通知コードと、連続する範囲のコントロール識別子に基づいて、反映された 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
に送信されます。 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_MAP と END_MSG_MAP のインスタンスは常に 1 つだけです。
ATL でメッセージ マップを使用する方法の詳細については、「メッセージ マップ」を参照してください。
要件
ヘッダー: atlwin.h
CHAIN_MSG_MAP_ALT
メッセージ マップ内のエントリを定義します。
CHAIN_MSG_MAP_ALT(theChainClass, msgMapID)
パラメーター
theChainClass
[入力] メッセージ マップを含む基本クラスの名前。
msgMapID
[入力] メッセージ マップの識別子。
解説
CHAIN_MSG_MAP_ALT では、メッセージを基本クラスの代替メッセージ マップに送信します。 ALT_MSG_MAP(msgMapID) を使用して、この代替メッセージ マップを宣言している必要があります。 メッセージを基本クラスの既定のメッセージ マップ (BEGIN_MSG_MAP を使用して宣言されます) に送信するには、CHAIN_MSG_MAP を使用します。 例については、「CHAIN_MSG_MAP」を参照してください。
Note
メッセージ マップは、常に BEGIN_MSG_MAP から開始します。 その後、ALT_MSG_MAP を使用して、後続の代替メッセージ マップを宣言できます。 END_MSG_MAP マクロでは、メッセージ マップの末尾をマークします。 すべてのメッセージ マップには、BEGIN_MSG_MAP と END_MSG_MAP のインスタンスを 1 つだけ指定する必要があります。
ATL でメッセージ マップを使用する方法の詳細については、「メッセージ マップ」を参照してください。
要件
ヘッダー: atlwin.h
CHAIN_MSG_MAP_ALT_MEMBER
メッセージ マップ内のエントリを定義します。
CHAIN_MSG_MAP_ALT_MEMBER(theChainMember, msgMapID)
パラメーター
theChainMember
[入力] からメッセージ マップを含むデータ メンバーの名前。
msgMapID
[入力] メッセージ マップの識別子。
解説
CHAIN_MSG_MAP_ALT_MEMBER では、メッセージをデータ メンバーの代替メッセージ マップに送信します。 ALT_MSG_MAP(msgMapID) を使用して、この代替メッセージ マップを宣言している必要があります。 メッセージをデータ メンバーの既定のメッセージ マップ (BEGIN_MSG_MAP を使用して宣言されます) に送信するには、CHAIN_MSG_MAP_MEMBER を使用します。 例については、「CHAIN_MSG_MAP_MEMBER」を参照してください。
Note
メッセージ マップは、常に BEGIN_MSG_MAP から開始します。 その後、ALT_MSG_MAP を使用して、後続の代替メッセージ マップを宣言できます。 END_MSG_MAP マクロでは、メッセージ マップの末尾をマークします。 すべてのメッセージ マップには、BEGIN_MSG_MAP と END_MSG_MAP のインスタンスを 1 つだけ指定する必要があります。
ATL でメッセージ マップを使用する方法の詳細については、「メッセージ マップ」を参照してください。
要件
ヘッダー: atlwin.h
CHAIN_MSG_MAP
メッセージ マップ内のエントリを定義します。
CHAIN_MSG_MAP(theChainClass)
パラメーター
theChainClass
[入力] メッセージ マップを含む基本クラスの名前。
解説
CHAIN_MSG_MAP では、メッセージを基本クラスの既定のメッセージ マップ (BEGIN_MSG_MAP を使用して宣言されます) に送信します。 メッセージを基本クラスの代替メッセージ マップ (ALT_MSG_MAP を使用して宣言されます) に送信するには、CHAIN_MSG_MAP_ALT を使用します。
Note
メッセージ マップは、常に BEGIN_MSG_MAP から開始します。 その後、ALT_MSG_MAP を使用して、後続の代替メッセージ マップを宣言できます。 END_MSG_MAP マクロでは、メッセージ マップの末尾をマークします。 すべてのメッセージ マップには、BEGIN_MSG_MAP と END_MSG_MAP のインスタンスを 1 つだけ指定する必要があります。
ATL でメッセージ マップを使用する方法の詳細については、「メッセージ マップ」を参照してください。
例
class CMyExtClass : public CMyBaseClass
{
public:
BEGIN_MSG_MAP(CMyExtClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
// chain to default message map in CMyBaseClass
CHAIN_MSG_MAP(CMyBaseClass)
ALT_MSG_MAP(1)
// chain to first alternative message map in CMyBaseClass
CHAIN_MSG_MAP(CMyBaseClass)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CHAR, OnChar)
// chain to alternate message map in CMyBaseClass
CHAIN_MSG_MAP_ALT(CMyBaseClass, 1)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
この例は、次の内容を示しています。
ウィンドウ プロシージャで
CMyClass
の既定のメッセージ マップが使用されており、OnPaint
によってメッセージが処理されない場合、メッセージは、処理のためにCMyBaseClass
の既定のメッセージ マップに送信されます。ウィンドウ プロシージャで
CMyClass
の最初の代替メッセージ マップが使用されている場合は、すべてのメッセージがCMyBaseClass
の既定のメッセージ マップに送信されます。ウィンドウ プロシージャで
CMyClass
の 2 番目の代替メッセージ マップが使用されており、OnChar
によってメッセージが処理されない場合、メッセージはCMyBaseClass
の特定の代替メッセージ マップに送信されます。CMyBaseClass
では、ALT_MSG_MAP(1) を使用してこのメッセージ マップを宣言している必要があります。
要件
ヘッダー: atlwin.h
CHAIN_MSG_MAP_DYNAMIC
メッセージ マップ内のエントリを定義します。
CHAIN_MSG_MAP_DYNAMIC(dynaChainID)
パラメーター
dynaChainID
[入力] オブジェクトのメッセージ マップの一意の識別子。
解説
CHAIN_MSG_MAP_DYNAMIC では、実行時にメッセージを別のオブジェクトの既定のメッセージ マップに送信します。 オブジェクトとそのメッセージ マップは、CDynamicChain::SetChainEntry を使用して定義する dynaChainID に関連付けられています。 CHAIN_MSG_MAP_DYNAMIC を使用するには、CDynamicChain
からクラスを派生させる必要があります。 例については、CDynamicChain の概要を参照してください。
Note
メッセージ マップは、常に BEGIN_MSG_MAP から開始します。 その後、ALT_MSG_MAP を使用して、後続の代替メッセージ マップを宣言できます。 END_MSG_MAP マクロでは、メッセージ マップの末尾をマークします。 すべてのメッセージ マップには、BEGIN_MSG_MAP と END_MSG_MAP のインスタンスを 1 つだけ指定する必要があります。
ATL でメッセージ マップを使用する方法の詳細については、「メッセージ マップ」を参照してください。
要件
ヘッダー: atlwin.h
CHAIN_MSG_MAP_MEMBER
メッセージ マップ内のエントリを定義します。
CHAIN_MSG_MAP_MEMBER(theChainMember)
パラメーター
theChainMember
[入力] からメッセージ マップを含むデータ メンバーの名前。
解説
CHAIN_MSG_MAP_MEMBER では、メッセージをデータ メンバーの既定のメッセージ マップ (BEGIN_MSG_MAP を使用して宣言されます) に送信します。 メッセージをデータ メンバーの代替メッセージ マップ (ALT_MSG_MAP を使用して宣言されます) に送信するには、CHAIN_MSG_MAP_ALT_MEMBER を使用します。
Note
メッセージ マップは、常に BEGIN_MSG_MAP から開始します。 その後、ALT_MSG_MAP を使用して、後続の代替メッセージ マップを宣言できます。 END_MSG_MAP マクロでは、メッセージ マップの末尾をマークします。 すべてのメッセージ マップには、BEGIN_MSG_MAP と END_MSG_MAP のインスタンスを 1 つだけ指定する必要があります。
ATL でメッセージ マップを使用する方法の詳細については、「メッセージ マップ」を参照してください。
例
class CMyContainerClass : public CWindowImpl<CMyContainerClass>
{
public:
CMyContainedClass m_obj;
BEGIN_MSG_MAP(CMyContainerClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
// chain to default message map of m_obj
CHAIN_MSG_MAP_MEMBER(m_obj)
ALT_MSG_MAP(1)
// chain to default message map of m_obj
CHAIN_MSG_MAP_MEMBER(m_obj)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CHAR, OnChar)
// chain to alternate message map of m_obj
CHAIN_MSG_MAP_ALT_MEMBER(m_obj, 1)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
この例は、次の内容を示しています。
ウィンドウ プロシージャで
CMyClass
の既定のメッセージ マップが使用されており、OnPaint
によってメッセージが処理されない場合、メッセージは、処理のためにm_obj
の既定のメッセージ マップに送信されます。ウィンドウ プロシージャで
CMyClass
の最初の代替メッセージ マップが使用されている場合は、すべてのメッセージがm_obj
の既定のメッセージ マップに送信されます。ウィンドウ プロシージャで
CMyClass
の 2 番目の代替メッセージ マップが使用されており、OnChar
によってメッセージが処理されない場合、メッセージはm_obj
の特定の代替メッセージ マップに送信されます。CMyContainedClass
クラスでは、ALT_MSG_MAP(1) を使用してこのメッセージ マップを宣言している必要があります。
要件
ヘッダー: atlwin.h
COMMAND_CODE_HANDLER
COMMAND_HANDLER に似ていますが、通知コードにのみ基づいて WM_COMMAND メッセージをマップします。
COMMAND_CODE_HANDLER(code, func)
パラメーター
code
[入力] 通知コード。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
COMMAND_HANDLER
メッセージ マップ内のエントリを定義します。
COMMAND_HANDLER(id, code, func)
パラメーター
id
[入力] メニュー項目、コントロール、またはアクセラレータの識別子。
code
[入力] 通知コード。
func
[入力] メッセージ ハンドラー関数の名前。
解説
COMMAND_HANDLER では、通知コードとコントロール識別子に基づいて、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 に設定して、メッセージをさらに処理する必要があることを示す必要があります。
Note
メッセージ マップは、常に BEGIN_MSG_MAP から開始します。 その後、ALT_MSG_MAP を使用して、後続の代替メッセージ マップを宣言できます。 END_MSG_MAP マクロでは、メッセージ マップの末尾をマークします。 すべてのメッセージ マップには、BEGIN_MSG_MAP と END_MSG_MAP のインスタンスを 1 つだけ指定する必要があります。
COMMAND_HANDLER に加えて、MESSAGE_HANDLER を使用して、識別子やコードに関係なく WM_COMMAND メッセージをマップすることもできます。 この場合、MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction)
によってすべての WM_COMMAND メッセージが OnHandlerFunction
に送信されます。
ATL でメッセージ マップを使用する方法の詳細については、「メッセージ マップ」を参照してください。
要件
ヘッダー: atlwin.h
COMMAND_ID_HANDLER
COMMAND_HANDLER に似ていますが、メニュー項目、コントロール、またはアクセラレータの識別子にのみ基づいて WM_COMMAND メッセージをマップします。
COMMAND_ID_HANDLER(id, func)
パラメーター
id
[入力] メッセージを送信するメニュー項目、コントロール、またはアクセラレータの識別子。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
COMMAND_RANGE_CODE_HANDLER
COMMAND_RANGE_HANDLER に似ていますが、特定の通知コードを持つ WM_COMMAND メッセージを、一連のコントロールから 1 つのハンドラー関数にマップします。
COMMAND_RANGE_CODE_HANDLER(idFirst, idLast, code, func)
パラメーター
idFirst
[入力] 連続する範囲のコントロール識別子の先頭をマークします。
idLast
[入力] 連続する範囲のコントロール識別子の末尾をマークします。
code
[入力] 通知コード。
func
[入力] メッセージ ハンドラー関数の名前。
解説
この範囲は、メッセージを送信するメニュー項目、コントロール、またはアクセラレータの識別子に基づいています。
要件
ヘッダー: atlwin.h
COMMAND_RANGE_HANDLER
COMMAND_HANDLER に似ていますが、WM_COMMAND メッセージを一連のコントロールから 1 つのハンドラー関数にマップします。
COMMAND_RANGE_HANDLER( idFirst, idLast, func)
パラメーター
idFirst
[入力] 連続する範囲のコントロール識別子の先頭をマークします。
idLast
[入力] 連続する範囲のコントロール識別子の末尾をマークします。
func
[入力] メッセージ ハンドラー関数の名前。
解説
この範囲は、メッセージを送信するメニュー項目、コントロール、またはアクセラレータの識別子に基づいています。
要件
ヘッダー: atlwin.h
DECLARE_EMPTY_MSG_MAP
空のメッセージ マップを宣言します。
DECLARE_EMPTY_MSG_MAP()
解説
DECLARE_EMPTY_MSG_MAP は、BEGIN_MSG_MAP マクロと END_MSG_MAP マクロを呼び出して空のメッセージ マップを作成する便利なマクロです。
BEGIN_MSG_MAP(CExample)
END_MSG_MAP()
DEFAULT_REFLECTION_HANDLER
反映されたメッセージを受信する子ウィンドウ (コントロール) の既定のハンドラーを指定します。このハンドラーにより、処理されていないメッセージが適切に DefWindowProc
に渡されます。
DEFAULT_REFLECTION_HANDLER()
要件
ヘッダー: atlwin.h
END_MSG_MAP
メッセージ マップの末尾をマークします。
END_MSG_MAP()
解説
メッセージ マップの先頭をマークするには、常に BEGIN_MSG_MAP マクロを使用します。 後続の代替メッセージ マップを宣言するには、ALT_MSG_MAP を使用します。
BEGIN_MSG_MAP と END_MSG_MAP のインスタンスは常に 1 つだけです。
ATL でメッセージ マップを使用する方法の詳細については、「メッセージ マップ」を参照してください。
例
次の例は、既定のメッセージ マップと 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()
要件
ヘッダー: atlwin.h
FORWARD_NOTIFICATIONS
通知メッセージを親ウィンドウに転送します。
FORWARD_NOTIFICATIONS()
解説
このマクロをメッセージ マップの一部として指定します。
要件
ヘッダー: atlwin.h
MESSAGE_HANDLER
メッセージ マップ内のエントリを定義します。
MESSAGE_HANDLER( msg, func )
パラメーター
msg
[入力] Windows メッセージ。
func
[入力] メッセージ ハンドラー関数の名前。
解説
MESSAGE_HANDLER では、Windows メッセージを指定のハンドラー関数にマップします。
MESSAGE_HANDLER マクロで指定される関数はすべて、次のように定義する必要があります。
LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
メッセージ マップでは、MessageHandler
が呼び出される前に bHandled
が TRUE に設定されます。 MessageHandler
によってメッセージが完全に処理されない場合は、bHandled
を FALSE に設定して、メッセージをさらに処理する必要があることを示す必要があります。
Note
メッセージ マップは、常に BEGIN_MSG_MAP から開始します。 その後、ALT_MSG_MAP を使用して、後続の代替メッセージ マップを宣言できます。 END_MSG_MAP マクロでは、メッセージ マップの末尾をマークします。 すべてのメッセージ マップには、BEGIN_MSG_MAP と END_MSG_MAP のインスタンスを 1 つだけ指定する必要があります。
MESSAGE_HANDLER に加えて、COMMAND_HANDLER と NOTIFY_HANDLER を使用して、WM_COMMAND メッセージと WM_NOTIFY メッセージをそれぞれマップできます。
ATL でメッセージ マップを使用する方法の詳細については、「メッセージ マップ」を参照してください。
例
class CMyBaseWindow : public CWindowImpl<CMyBaseWindow>
{
public:
BEGIN_MSG_MAP(CMyBaseWindow)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
// When a CMyBaseWindow object receives a WM_CREATE message, the message
// is directed to CMyBaseWindow::OnCreate for the actual processing.
LRESULT OnCreate(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
要件
ヘッダー: atlwin.h
MESSAGE_RANGE_HANDLER
MESSAGE_HANDLER に似ていますが、一連の Windows メッセージを 1 つのハンドラー関数にマップします。
MESSAGE_RANGE_HANDLER( msgFirst, msgLast, func )
パラメーター
msgFirst
[入力] 連続するメッセージの範囲の先頭をマークします。
msgLast
[入力] 連続する範囲のメッセージの末尾をマークします。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
NOTIFY_CODE_HANDLER
NOTIFY_HANDLER に似ていますが、通知コードにのみ基づいて WM_NOTIFY メッセージをマップします。
NOTIFY_CODE_HANDLER(cd, func)
パラメーター
cd
[入力] 通知コード。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
NOTIFY_HANDLER
メッセージ マップ内のエントリを定義します。
NOTIFY_HANDLER( id, cd, func )
パラメーター
id
[入力] メッセージを送信するコントロールの識別子。
cd
[入力] 通知コード。
func
[入力] メッセージ ハンドラー関数の名前。
解説
NOTIFY_HANDLER では、通知コードとコントロール識別子に基づいて、WM_NOTIFY メッセージを指定のハンドラー関数にマップします。
NOTIFY_HANDLER マクロで指定される関数はすべて、次のように定義する必要があります。
LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
メッセージ マップでは、NotifyHandler
が呼び出される前に bHandled
が TRUE に設定されます。 NotifyHandler
によってメッセージが完全に処理されない場合は、bHandled
を FALSE に設定して、メッセージをさらに処理する必要があることを示す必要があります。
Note
メッセージ マップは、常に BEGIN_MSG_MAP から開始します。 その後、ALT_MSG_MAP を使用して、後続の代替メッセージ マップを宣言できます。 END_MSG_MAP マクロでは、メッセージ マップの末尾をマークします。 すべてのメッセージ マップには、BEGIN_MSG_MAP と END_MSG_MAP のインスタンスを 1 つだけ指定する必要があります。
NOTIFY_HANDLER に加えて、MESSAGE_HANDLER を使用して、識別子やコードに関係なく WM_NOTIFY メッセージをマップすることもできます。 この場合、MESSAGE_HANDLER(WM_NOTIFY, OnHandlerFunction)
によってすべての WM_NOTIFY メッセージが OnHandlerFunction
に送信されます。
ATL でメッセージ マップを使用する方法の詳細については、「メッセージ マップ」を参照してください。
例
class CMyDialog2 : public CDialogImpl<CMyDialog2>
{
public:
enum { IDD = IDD_MYDLG };
BEGIN_MSG_MAP(CMyDialog2)
NOTIFY_HANDLER(IDC_TREE1, NM_CLICK, OnNMClickTree1)
END_MSG_MAP()
public:
// When a CMyDialog2 object receives a WM_NOTIFY message
// identified by IDC_TREE1 and NM_CLICK, the message is
// directed to CMyDialog2::OnNMClickTree1 for the actual
// processing.
LRESULT OnNMClickTree1(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/);
};
要件
ヘッダー: atlwin.h
NOTIFY_ID_HANDLER
NOTIFY_HANDLER に似ていますが、コントロール識別子にのみ基づいて WM_NOTIFY メッセージをマップします。
NOTIFY_ID_HANDLER( id, func )
パラメーター
id
[入力] メッセージを送信するコントロールの識別子。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
NOTIFY_RANGE_CODE_HANDLER
NOTIFY_RANGE_HANDLER に似ていますが、特定の通知コードを持つ WM_NOTIFY メッセージを、一連のコントロールから 1 つのハンドラー関数にマップします。
NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )
パラメーター
idFirst
[入力] 連続する範囲のコントロール識別子の先頭をマークします。
idLast
[入力] 連続する範囲のコントロール識別子の末尾をマークします。
cd
[入力] 通知コード。
func
[入力] メッセージ ハンドラー関数の名前。
解説
この範囲は、メッセージを送信するコントロールの識別子に基づいています。
要件
ヘッダー: atlwin.h
NOTIFY_RANGE_HANDLER
NOTIFY_HANDLER に似ていますが、WM_NOTIFY メッセージを一連のコントロールから 1 つのハンドラー関数にマップします。
NOTIFY_RANGE_HANDLER( idFirst, idLast, func )
パラメーター
idFirst
[入力] 連続する範囲のコントロール識別子の先頭をマークします。
idLast
[入力] 連続する範囲のコントロール識別子の末尾をマークします。
func
[入力] メッセージ ハンドラー関数の名前。
解説
この範囲は、メッセージを送信するコントロールの識別子に基づいています。
要件
ヘッダー: atlwin.h
REFLECT_NOTIFICATIONS
通知メッセージを送信した子ウィンドウ (コントロール) にこれらのメッセージを反映します。
REFLECT_NOTIFICATIONS()
解説
このマクロを親ウィンドウのメッセージ マップの一部として指定します。
要件
ヘッダー: atlwin.h
REFLECTED_COMMAND_CODE_HANDLER
COMMAND_CODE_HANDLER に似ていますが、親ウィンドウから反映されたコマンドをマップします。
REFLECTED_COMMAND_CODE_HANDLER( code, func )
パラメーター
code
[入力] 通知コード。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
REFLECTED_COMMAND_HANDLER
COMMAND_HANDLER に似ていますが、親ウィンドウから反映されたコマンドをマップします。
REFLECTED_COMMAND_HANDLER( id, code, func )
パラメーター
id
[入力] メニュー項目、コントロール、またはアクセラレータの識別子。
code
[入力] 通知コード。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
REFLECTED_COMMAND_ID_HANDLER
COMMAND_ID_HANDLER に似ていますが、親ウィンドウから反映されたコマンドをマップします。
REFLECTED_COMMAND_ID_HANDLER( id, func )
パラメーター
id
[入力] メニュー項目、コントロール、またはアクセラレータの識別子。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
REFLECTED_COMMAND_RANGE_CODE_HANDLER
COMMAND_RANGE_CODE_HANDLER に似ていますが、親ウィンドウから反映されたコマンドをマップします。
REFLECTED_COMMAND_RANGE_CODE_HANDLER( idFirst, idLast, code, func )
パラメーター
idFirst
[入力] 連続する範囲のコントロール識別子の先頭をマークします。
idLast
[入力] 連続する範囲のコントロール識別子の末尾をマークします。
code
[入力] 通知コード。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
REFLECTED_COMMAND_RANGE_HANDLER
COMMAND_RANGE_HANDLER に似ていますが、親ウィンドウから反映されたコマンドをマップします。
REFLECTED_COMMAND_RANGE_HANDLER( idFirst, idLast, func )
パラメーター
idFirst
[入力] 連続する範囲のコントロール識別子の先頭をマークします。
idLast
[入力] 連続する範囲のコントロール識別子の末尾をマークします。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
REFLECTED_NOTIFY_CODE_HANDLER
NOTIFY_CODE_HANDLER に似ていますが、親ウィンドウから反映された通知をマップします。
REFLECTED_NOTIFY_CODE_HANDLER_EX( cd, func )
パラメーター
cd
[入力] 通知コード。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
REFLECTED_NOTIFY_HANDLER
NOTIFY_HANDLER に似ていますが、親ウィンドウから反映された通知をマップします。
REFLECTED_NOTIFY_HANDLER( id, cd, func )
パラメーター
id
[入力] メニュー項目、コントロール、またはアクセラレータの識別子。
cd
[入力] 通知コード。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
REFLECTED_NOTIFY_ID_HANDLER
NOTIFY_ID_HANDLER に似ていますが、親ウィンドウから反映された通知をマップします。
REFLECTED_NOTIFY_ID_HANDLER( id, func )
パラメーター
id
[入力] メニュー項目、コントロール、またはアクセラレータの識別子。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
REFLECTED_NOTIFY_RANGE_CODE_HANDLER
NOTIFY_RANGE_CODE_HANDLER に似ていますが、親ウィンドウから反映された通知をマップします。
REFLECTED_NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )
パラメーター
idFirst
[入力] 連続する範囲のコントロール識別子の先頭をマークします。
idLast
[入力] 連続する範囲のコントロール識別子の末尾をマークします。
cd
[入力] 通知コード。
func
[入力] メッセージ ハンドラー関数の名前。
要件
ヘッダー: atlwin.h
REFLECTED_NOTIFY_RANGE_HANDLER
NOTIFY_RANGE_HANDLER に似ていますが、親ウィンドウから反映された通知をマップします。
REFLECTED_NOTIFY_RANGE_HANDLER( idFirst, idLast, func )
パラメーター
idFirst
[入力] 連続する範囲のコントロール識別子の先頭をマークします。
idLast
[入力] 連続する範囲のコントロール識別子の末尾をマークします。
func
[入力] メッセージ ハンドラー関数の名前。