Message Map Macros (ATL)

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

這些巨集定義的訊息對應和項目。

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訊息處理常式函式,根據連續控制識別項的範圍。

標記替代訊息對應的開頭。

ALT_MSG_MAP(msgMapID)

參數

msgMapID
[in]訊息對應識別項。

備註

ATL 識別每個訊息對應,以數字。 預設訊息對應 (以宣告BEGIN_MSG_MAP巨集) 由 0。 替代訊息對應由msgMapID

訊息對應用來處理訊息傳送至視窗。 例如, CContainedWindow可讓您指定的訊息對應的識別碼中包含的物件。 CContainedWindow::WindowProc然後會使用此訊息對應至適當的處理常式函式或另一個訊息對應的包含的視窗的訊息導向。 如需宣告處理常式函式的巨集,請參閱BEGIN_MSG_MAP

一定會開始使用訊息對應BEGIN_MSG_MAP。 然後,您可以宣告後續的替代訊息對應。

END_MSG_MAP巨集標記結尾的訊息對應。 請注意,有一定只有一個執行個體BEGIN_MSG_MAPEND_MSG_MAP

如需在 ATL 中使用訊息對應的詳細資訊,請參閱訊息對應

範例

下列範例會顯示預設訊息對應和一個替代的訊息對應,每一個都會包含一個處理常式函式︰

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

下一個範例顯示兩個替代訊息對應。 預設訊息對應是空的。

   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()

標示為預設的訊息對應的開頭。

BEGIN_MSG_MAP(theClass)

參數

theClass
[in]包含訊息對應的類別名稱。

備註

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。 然後,您可以宣告後續的替代訊息對應。 下列範例會顯示預設訊息對應和一個替代的訊息對應,每一個都會包含一個處理常式函式︰

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

下一個範例顯示兩個替代訊息對應。 預設訊息對應是空的。

   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

如需在 ATL 中使用訊息對應的詳細資訊,請參閱訊息對應

在訊息對應中定義的項目。

CHAIN_MSG_MAP_ALT(theChainClass, msgMapID)

參數

theChainClass
[in]包含訊息對應的基底類別的名稱。

msgMapID
[in]訊息對應識別項。

備註

CHAIN_MSG_MAP_ALT指示訊息的替代訊息對應至基底類別。 您也必須宣告具有此替代訊息對應ALT_MSG_MAP(msgMapID)。 若要將訊息導向到基底類別的預設訊息對應 (以宣告BEGIN_MSG_MAP),使用CHAIN_MSG_MAP。 如需範例,請參閱CHAIN_MSG_MAP

System_CAPS_ICON_note.jpg 注意

一定會開始使用訊息對應BEGIN_MSG_MAP。 然後,您可以宣告具有後續的替代訊息對應ALT_MSG_MAPEND_MSG_MAP巨集標記結尾的訊息對應。 每個訊息的對應必須只有一個執行個體BEGIN_MSG_MAPEND_MSG_MAP

如需在 ATL 中使用訊息對應的詳細資訊,請參閱訊息對應

在訊息對應中定義的項目。

CHAIN_MSG_MAP_ALT_MEMBER(theChainMember, msgMapID)

參數

theChainMember
[in]包含訊息對應的資料成員名稱。

msgMapID
[in]訊息對應識別項。

備註

CHAIN_MSG_MAP_ALT_MEMBER將替代訊息對應的訊息導向的資料成員中。 您也必須宣告具有此替代訊息對應ALT_MSG_MAP(msgMapID)。 若要將訊息導向到的資料成員的預設訊息對應 (以宣告BEGIN_MSG_MAP),使用CHAIN_MSG_MAP_MEMBER。 如需範例,請參閱CHAIN_MSG_MAP_MEMBER

System_CAPS_ICON_note.jpg 注意

一定會開始使用訊息對應BEGIN_MSG_MAP。 然後,您可以宣告具有後續的替代訊息對應ALT_MSG_MAPEND_MSG_MAP巨集標記結尾的訊息對應。 每個訊息的對應必須只有一個執行個體BEGIN_MSG_MAPEND_MSG_MAP

如需在 ATL 中使用訊息對應的詳細資訊,請參閱訊息對應

在訊息對應中定義的項目。

CHAIN_MSG_MAP(theChainClass)

參數

theChainClass
[in]包含訊息對應的基底類別的名稱。

備註

CHAIN_MSG_MAP指示基底類別的預設訊息對應的訊息 (以宣告BEGIN_MSG_MAP)。 若要將訊息導向到基底類別的替代訊息對應 (以宣告ALT_MSG_MAP),使用CHAIN_MSG_MAP_ALT

System_CAPS_ICON_note.jpg 注意

一定會開始使用訊息對應BEGIN_MSG_MAP。 然後,您可以宣告具有後續的替代訊息對應ALT_MSG_MAPEND_MSG_MAP巨集標記結尾的訊息對應。 每個訊息的對應必須只有一個執行個體BEGIN_MSG_MAPEND_MSG_MAP

如需在 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的第二個替代訊息對應和OnChar不的處理訊息,訊息會導向至指定的替代訊息對應中CMyBaseClassCMyBaseClass必須與此訊息對應宣告ALT_MSG_MAP(1)

在訊息對應中定義的項目。

CHAIN_MSG_MAP_DYNAMIC(dynaChainID)

參數

dynaChainID
[in]物件的訊息對應的唯一識別碼。

備註

CHAIN_MSG_MAP_DYNAMIC指示訊息,在執行階段,在另一個物件的預設訊息對應。 相關聯的物件和其訊息對應dynaChainID,定義透過CDynamicChain::SetChainEntry。 您必須衍生您的類別,從CDynamicChain才能使用CHAIN_MSG_MAP_DYNAMIC。 如需範例,請參閱CDynamicChain概觀。

System_CAPS_ICON_note.jpg 注意

一定會開始使用訊息對應BEGIN_MSG_MAP。 然後,您可以宣告具有後續的替代訊息對應ALT_MSG_MAPEND_MSG_MAP巨集標記結尾的訊息對應。 每個訊息的對應必須只有一個執行個體BEGIN_MSG_MAPEND_MSG_MAP

如需在 ATL 中使用訊息對應的詳細資訊,請參閱訊息對應

在訊息對應中定義的項目。

CHAIN_MSG_MAP_MEMBER(theChainMember)

參數

theChainMember
[in]包含訊息對應的資料成員名稱。

備註

CHAIN_MSG_MAP_MEMBER指示訊息至資料成員的預設訊息對應 (以宣告BEGIN_MSG_MAP)。 若要將訊息導向到的資料成員的替代訊息對應 (以宣告ALT_MSG_MAP),使用CHAIN_MSG_MAP_ALT_MEMBER

System_CAPS_ICON_note.jpg 注意

一定會開始使用訊息對應BEGIN_MSG_MAP。 然後,您可以宣告具有後續的替代訊息對應ALT_MSG_MAPEND_MSG_MAP巨集標記結尾的訊息對應。 每個訊息的對應必須只有一個執行個體BEGIN_MSG_MAPEND_MSG_MAP

如需在 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的第二個替代訊息對應和OnChar不的處理訊息,訊息會導向至指定的替代訊息對應的m_obj。 類別CMyContainedClass必須與此訊息對應宣告ALT_MSG_MAP(1)

類似於COMMAND_HANDLER,但對應WM_COMMAND訊息只根據通知程式碼。

COMMAND_CODE_HANDLER(code, func)

參數

code
[in]通知程式碼。

func
[in]訊息處理常式函式的名稱。

在訊息對應中定義的項目。

COMMAND_HANDLER(id, code, func)

參數

id
[in]功能表項目、 控制項或對應的識別碼。

code
[in]通知程式碼。

func
[in]訊息處理常式函式的名稱。

備註

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);

訊息對應集bHandledTRUE之前CommandHandler呼叫。 如果CommandHandler不完整地處理訊息,它應該設定bHandledFALSE指出需要進一步處理的訊息。

System_CAPS_ICON_note.jpg 注意

一定會開始使用訊息對應BEGIN_MSG_MAP。 然後,您可以宣告具有後續的替代訊息對應ALT_MSG_MAPEND_MSG_MAP巨集標記結尾的訊息對應。 每個訊息的對應必須只有一個執行個體BEGIN_MSG_MAPEND_MSG_MAP

除了COMMAND_HANDLER,您可以使用MESSAGE_HANDLER對應WM_COMMAND無關的識別項或程式碼的訊息。 在此情況下,MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction)導向所有WM_COMMAND訊息傳送至OnHandlerFunction

如需在 ATL 中使用訊息對應的詳細資訊,請參閱訊息對應

類似於COMMAND_HANDLER,但對應WM_COMMAND訊息只根據功能表項目、 控制項或對應的識別碼。

COMMAND_ID_HANDLER(id, func)

參數

id
[in]功能表項目、 控制項或加速器傳送訊息的識別碼。

func
[in]訊息處理常式函式的名稱。

類似於COMMAND_RANGE_HANDLER,但對應WM_COMMAND特定通知的程式碼的控制項範圍的單一處理常式函式的訊息。

COMMAND_RANGE_CODE_HANDLER(idFirst, idLast, code, func)

參數

idFirst
[in]標記控制識別項的連續範圍的開頭。

idLast
[in]標示控制識別項的連續範圍的結尾。

code
[in]通知程式碼。

func
[in]訊息處理常式函式的名稱。

備註

此範圍為基礎的功能表項目、 控制項或加速器傳送訊息的識別碼。

類似於COMMAND_HANDLER,但對應WM_COMMAND各式各樣的控制項的單一處理常式函式的訊息。

COMMAND_RANGE_HANDLER( idFirst, idLast, func)

參數

idFirst
[in]標記控制識別項的連續範圍的開頭。

idLast
[in]標示控制識別項的連續範圍的結尾。

func
[in]訊息處理常式函式的名稱。

備註

此範圍為基礎的功能表項目、 控制項或加速器傳送訊息的識別碼。

宣告空的訊息對應。

DECLARE_EMPTY_MSG_MAP()

備註

DECLARE_EMPTY_MSG_MAP為方便巨集呼叫巨集BEGIN_MSG_MAPEND_MSG_MAP建立空白的訊息對應︰

   BEGIN_MSG_MAP(CExample)
   END_MSG_MAP()

提供的預設處理常式將會收到子視窗 (控制) 反映訊息。處理常式會將未處理的訊息,以正確傳遞DefWindowProc

DEFAULT_REFLECTION_HANDLER()

結束標記的訊息對應。

END_MSG_MAP()

備註

一律使用BEGIN_MSG_MAP標記開頭的訊息對應巨集。 使用ALT_MSG_MAP宣告後續的替代訊息對應。

請注意,有一定只有一個執行個體BEGIN_MSG_MAPEND_MSG_MAP

如需在 ATL 中使用訊息對應的詳細資訊,請參閱訊息對應

範例

下列範例會顯示預設訊息對應和一個替代的訊息對應,每一個都會包含一個處理常式函式︰

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

下一個範例顯示兩個替代訊息對應。 預設訊息對應是空的。

   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()

將轉送通知訊息給父視窗。

FORWARD_NOTIFICATIONS()

備註

指定這個巨集做為訊息對應的一部分。

在訊息對應中定義的項目。

MESSAGE_HANDLER(Â
    msg, Â
    func Â)

參數

msg
[in]Windows 訊息。

func
[in]訊息處理常式函式的名稱。

備註

MESSAGE_HANDLER將 Windows 訊息對應至指定的處理常式函式。

指定在任何函式MESSAGE_HANDLER必須定義巨集,如下所示︰

LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

訊息對應集bHandledTRUE之前MessageHandler呼叫。 如果MessageHandler不完整地處理訊息,它應該設定bHandledFALSE指出需要進一步處理的訊息。

System_CAPS_ICON_note.jpg 注意

一定會開始使用訊息對應BEGIN_MSG_MAP。 然後,您可以宣告具有後續的替代訊息對應ALT_MSG_MAPEND_MSG_MAP巨集標記結尾的訊息對應。 每個訊息的對應必須只有一個執行個體BEGIN_MSG_MAPEND_MSG_MAP

除了MESSAGE_HANDLER,您可以使用COMMAND_HANDLERNOTIFY_HANDLER對應WM_COMMANDWM_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;   
   }
};

類似於MESSAGE_HANDLER,但對應至單一處理常式函式的各種 Windows 訊息。

MESSAGE_RANGE_HANDLER(Â
    msgFirst, Â
    msgLast, Â
    func Â)

參數

msgFirst
[in]標示郵件的連續範圍的開頭。

msgLast
[in]標示郵件的連續範圍的結尾。

func
[in]訊息處理常式函式的名稱。

類似於NOTIFY_HANDLER,但對應WM_NOTIFY訊息只根據通知程式碼。

NOTIFY_CODE_HANDLER(Â
    cd, Â
    func Â)

參數

cd
[in]通知程式碼。

func
[in]訊息處理常式函式的名稱。

在訊息對應中定義的項目。

NOTIFY_HANDLER(Â
    id, Â
    cd, Â
    func Â)

參數

id
[in]傳送訊息的控制項識別項。

cd
[in]通知程式碼。

func
[in]訊息處理常式函式的名稱。

備註

NOTIFY_HANDLER對應WM_NOTIFY訊息至指定的處理常式函式,根據通知程式碼和控制識別項。

指定在任何函式NOTIFY_HANDLER必須定義巨集,如下所示︰

LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);

訊息對應集bHandledTRUE之前NotifyHandler呼叫。 如果NotifyHandler不完整地處理訊息,它應該設定bHandledFALSE指出需要進一步處理的訊息。

System_CAPS_ICON_note.jpg 注意

一定會開始使用訊息對應BEGIN_MSG_MAP。 然後,您可以宣告具有後續的替代訊息對應ALT_MSG_MAPEND_MSG_MAP巨集標記結尾的訊息對應。 每個訊息的對應必須只有一個執行個體BEGIN_MSG_MAPEND_MSG_MAP

除了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*/);
};

類似於NOTIFY_HANDLER,但對應WM_NOTIFY訊息只根據控制識別項。

NOTIFY_ID_HANDLER(Â
    id, Â
    func Â)

參數

id
[in]傳送訊息的控制項識別項。

func
[in]訊息處理常式函式的名稱。

類似於NOTIFY_RANGE_HANDLER,但對應WM_NOTIFY特定通知的程式碼的控制項範圍的單一處理常式函式的訊息。

NOTIFY_RANGE_CODE_HANDLER(Â
    idFirst, Â
    idLast, Â
    cd, Â
    func Â)

參數

idFirst
[in]標記控制識別項的連續範圍的開頭。

idLast
[in]標示控制識別項的連續範圍的結尾。

cd
[in]通知程式碼。

func
[in]訊息處理常式函式的名稱。

備註

此範圍為基礎的傳送訊息的控制項識別項。

類似於NOTIFY_HANDLER,但對應WM_NOTIFY各式各樣的控制項的單一處理常式函式的訊息。

NOTIFY_RANGE_HANDLER(Â
    idFirst, Â
    idLast, Â
    func Â)

參數

idFirst
[in]標記控制識別項的連續範圍的開頭。

idLast
[in]標示控制識別項的連續範圍的結尾。

func
[in]訊息處理常式函式的名稱。

備註

此範圍為基礎的傳送訊息的控制項識別項。

會反映回傳送給它們的子視窗 (控制項) 的通知訊息。

REFLECT_NOTIFICATIONS()

備註

指定這個巨集做為父視窗的訊息對應的一部分。

類似於COMMAND_CODE_HANDLER,但將反映在父視窗的命令對應。

REFLECTED_COMMAND_CODE_HANDLER(Â
    code, Â
    func Â)

參數

code
[in]通知程式碼。

func
[in]訊息處理常式函式的名稱。

類似於COMMAND_HANDLER,但將反映在父視窗的命令對應。

REFLECTED_COMMAND_HANDLER(Â
    id, Â
    code, Â
    func Â)

參數

id
[in]功能表項目、 控制項或對應的識別碼。

code
[in]通知程式碼。

func
[in]訊息處理常式函式的名稱。

類似於COMMAND_ID_HANDLER,但將反映在父視窗的命令對應。

REFLECTED_COMMAND_ID_HANDLER(Â
    id, Â
    func Â)

參數

id
[in]功能表項目、 控制項或對應的識別碼。

func
[in]訊息處理常式函式的名稱。

類似於COMMAND_RANGE_CODE_HANDLER,但將反映在父視窗的命令對應。

REFLECTED_COMMAND_RANGE_CODE_HANDLER(Â
    idFirst, Â
    idLast, Â
    code, Â
    func Â)

參數

idFirst
[in]標記控制識別項的連續範圍的開頭。

idLast
[in]標示控制識別項的連續範圍的結尾。

code
[in]通知程式碼。

func
[in]訊息處理常式函式的名稱。

類似於COMMAND_RANGE_HANDLER,但將反映在父視窗的命令對應。

REFLECTED_COMMAND_RANGE_HANDLER(Â
    idFirst, Â
    idLast, Â
    func Â)

參數

idFirst
[in]標記控制識別項的連續範圍的開頭。

idLast
[in]標示控制識別項的連續範圍的結尾。

func
[in]訊息處理常式函式的名稱。

類似於NOTIFY_CODE_HANDLER,但對應反映與父視窗的通知。

REFLECTED_NOTIFY_CODE_HANDLER_EX(Â
    cd, Â
    func Â)

參數

cd
[in]通知程式碼。

func
[in]訊息處理常式函式的名稱。

類似於NOTIFY_HANDLER,但對應反映與父視窗的通知。

REFLECTED_NOTIFY_HANDLER(Â
    id, Â
    cd, Â
    func Â)

參數

id
[in]功能表項目、 控制項或對應的識別碼。

cd
[in]通知程式碼。

func
[in]訊息處理常式函式的名稱。

類似於NOTIFY_ID_HANDLER,但對應反映與父視窗的通知。

REFLECTED_NOTIFY_ID_HANDLER(Â
    id, Â
    func Â)

參數

id
[in]功能表項目、 控制項或對應的識別碼。

func
[in]訊息處理常式函式的名稱。

類似於NOTIFY_RANGE_CODE_HANDLER,但對應反映與父視窗的通知。

REFLECTED_NOTIFY_RANGE_CODE_HANDLER(
idFirst,Â
    idLast, Â
    cd, Â
    func)

參數

idFirst
[in]標記控制識別項的連續範圍的開頭。

idLast
[in]標示控制識別項的連續範圍的結尾。

cd
[in]通知程式碼。

func
[in]訊息處理常式函式的名稱。

類似於NOTIFY_RANGE_HANDLER,但對應反映與父視窗的通知。

REFLECTED_NOTIFY_RANGE_HANDLER(Â
    idFirst, Â
    idLast, Â
    func Â)

參數

idFirst
[in]標記控制識別項的連續範圍的開頭。

idLast
[in]標示控制識別項的連續範圍的結尾。

func
[in]訊息處理常式函式的名稱。

巨集

顯示: