共用方式為


訊息對應巨集 (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
[in]訊息對應標識碼。

備註

ATL 會依數字識別每個訊息對應。 默認訊息對應 (以 BEGIN_MSG_MAP 巨集 宣告) 會以 0 來識別。 msgMapID識別替代訊息對應。

訊息對應可用來處理傳送至視窗的訊息。 例如, CContainedWindow 可讓您在包含的物件中指定訊息對應的識別碼。 CContainedWindow::WindowProc 接著會使用此訊息對應,將自主視窗的訊息導向適當的處理程式函式或另一個訊息對應。 如需宣告處理程式函式的宏清單,請參閱 BEGIN_MSG_MAP

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

END_MSG_MAP巨集標示訊息對應的結尾。 請注意,一律只有一個實例BEGIN_MSG_MAP和END_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()

需求

標頭: atlwin.h

BEGIN_MSG_MAP

標記預設訊息對應的開頭。

BEGIN_MSG_MAP(theClass)

參數

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

備註

CWindowImpl::WindowProc 會使用預設訊息對應來處理傳送至視窗的訊息。 訊息對應會將訊息導向適當的處理程式函式或另一個訊息對應。

下列宏會將訊息對應至處理程式函式。 此函式必須在Class定義。

Macro 描述
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訊息範圍對應至處理程式函式。

下列宏會將訊息導向至另一個訊息對應。 此程式稱為「鏈結」。

Macro 描述
CHAIN_MSG_MAP 鏈結至基類中的預設訊息對應。
CHAIN_MSG_MAP_MEMBER 鏈結至 類別數據成員中的預設訊息對應。
CHAIN_MSG_MAP_ALT 鏈結至基類中的替代訊息對應。
CHAIN_MSG_MAP_ALT_MEMBER 鏈結至 類別數據成員中的替代訊息對應。
CHAIN_MSG_MAP_DYNAMIC 鏈結至運行時間另一個類別中的預設訊息對應。

下列宏會從父窗口導向「反映」訊息。 例如,控件通常會將通知訊息傳送至其父視窗進行處理,但父視窗可以將訊息反映回控件。

Macro 描述
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_MAP和END_MSG_MAP。

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

需求

標頭: atlwin.h

CHAIN_MSG_MAP_ALT

定義訊息對應中的專案。

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

注意

一律使用BEGIN_MSG_MAP開始訊息對應。 接著,您可以使用 ALT_MSG_MAP來宣告後續的替代訊息對應。 END_MSG_MAP巨集標示訊息對應的結尾。 每個訊息對應都必須只有一個實例BEGIN_MSG_MAP和END_MSG_MAP。

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

需求

標頭: atlwin.h

CHAIN_MSG_MAP_ALT_MEMBER

定義訊息對應中的專案。

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

注意

一律使用BEGIN_MSG_MAP開始訊息對應。 接著,您可以使用 ALT_MSG_MAP來宣告後續的替代訊息對應。 END_MSG_MAP巨集標示訊息對應的結尾。 每個訊息對應都必須只有一個實例BEGIN_MSG_MAP和END_MSG_MAP。

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

需求

標頭: atlwin.h

CHAIN_MSG_MAP

定義訊息對應中的專案。

CHAIN_MSG_MAP(theChainClass)

參數

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

備註

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

注意

一律使用BEGIN_MSG_MAP開始訊息對應。 接著,您可以使用 ALT_MSG_MAP來宣告後續的替代訊息對應。 END_MSG_MAP巨集標示訊息對應的結尾。 每個訊息對應都必須只有一個實例BEGIN_MSG_MAP和END_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未處理訊息,訊息就會導向至 中指定的替代訊息對應。CMyBaseClass CMyBaseClass 必須已使用 ALT_MSG_MAP(1) 宣告此訊息對應。

需求

標頭: atlwin.h

CHAIN_MSG_MAP_DYNAMIC

定義訊息對應中的專案。

CHAIN_MSG_MAP_DYNAMIC(dynaChainID)

參數

dynaChainID
[in]物件訊息對應的唯一標識符。

備註

CHAIN_MSG_MAP_DYNAMIC在運行時間將訊息導向至另一個 物件中的預設訊息對應。 物件及其訊息對應會與您透過 CDynamicChain::SetChainEntry 定義的 dynaChainID 相關聯。 您必須從 CDynamicChain 衍生類別,才能使用 CHAIN_MSG_MAP_DYNAMIC。 如需範例,請參閱 CDynamicChain 概觀。

注意

一律使用 BEGIN_MSG_MAP開始訊息對應。 接著,您可以使用 ALT_MSG_MAP來宣告後續的替代訊息對應。 END_MSG_MAP巨集標示訊息對應的結尾。 每個訊息對應都必須只有一個實例BEGIN_MSG_MAP和END_MSG_MAP。

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

需求

標頭: atlwin.h

CHAIN_MSG_MAP_MEMBER

定義訊息對應中的專案。

CHAIN_MSG_MAP_MEMBER(theChainMember)

參數

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

備註

CHAIN_MSG_MAP_MEMBER會將訊息導向至數據成員的預設訊息對應(以 BEGIN_MSG_MAP 宣告)。 若要將訊息導向至數據成員的替代訊息對應(以 ALT_MSG_MAP 宣告),請使用 CHAIN_MSG_MAP_ALT_MEMBER

注意

一律使用BEGIN_MSG_MAP開始訊息對應。 接著,您可以使用 ALT_MSG_MAP來宣告後續的替代訊息對應。 END_MSG_MAP巨集標示訊息對應的結尾。 每個訊息對應都必須只有一個實例BEGIN_MSG_MAP和END_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) 宣告此訊息對應。

需求

標頭: atlwin.h

COMMAND_CODE_HANDLER

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

COMMAND_CODE_HANDLER(code, func)

參數

code
[in]通知碼。

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

需求

標頭: atlwin.h

COMMAND_HANDLER

定義訊息對應中的專案。

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

在呼叫 之前CommandHandler,訊息對應會設定bHandled為 TRUE。 如果未 CommandHandler 完全處理訊息,它應該設定 bHandled 為 FALSE,表示訊息需要進一步處理。

注意

一律使用 BEGIN_MSG_MAP開始訊息對應。 接著,您可以使用 ALT_MSG_MAP 來宣告後續的替代訊息對應END_MSG_MAP巨集標示訊息對應的結尾。 每個訊息對應都必須只有一個實例BEGIN_MSG_MAP和END_MSG_MAP。

除了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
[in]傳送訊息之功能表項、控制件或快捷鍵的識別碼。

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

需求

標頭: atlwin.h

COMMAND_RANGE_CODE_HANDLER

類似於COMMAND_RANGE_HANDLER,但會將WM_COMMAND訊息與特定通知程式代碼從一系列控件對應到單一處理程式函式。

COMMAND_RANGE_CODE_HANDLER(idFirst, idLast, code, func)

參數

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

idLast
[in]標記連續控制標識碼範圍的結尾。

code
[in]通知碼。

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

備註

此範圍是以傳送訊息之功能表項、控制項或快捷鍵的標識碼為基礎。

需求

標頭: atlwin.h

COMMAND_RANGE_HANDLER

類似於COMMAND_HANDLER,但會將WM_COMMAND訊息從一系列控件對應至單一處理程式函式。

COMMAND_RANGE_HANDLER( idFirst, idLast, func)

參數

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

idLast
[in]標記連續控制標識碼範圍的結尾。

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

備註

此範圍是以傳送訊息之功能表項、控制項或快捷鍵的標識碼為基礎。

需求

標頭: atlwin.h

DECLARE_EMPTY_MSG_MAP

宣告空訊息對應。

DECLARE_EMPTY_MSG_MAP()

備註

DECLARE_EMPTY_MSG_MAP是一種便利巨集,會呼叫宏 BEGIN_MSG_MAPEND_MSG_MAP 來建立空訊息對應:

BEGIN_MSG_MAP(CExample)
END_MSG_MAP()

DEFAULT_REFLECTION_HANDLER

提供將接收反映訊息之子視窗 (control) 的預設處理程式;處理程式會將未處理的訊息正確傳遞至 DefWindowProc

DEFAULT_REFLECTION_HANDLER()

需求

標頭: atlwin.h

END_MSG_MAP

標記訊息對應的結尾。

END_MSG_MAP()

備註

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

請注意,一律只有一個實例BEGIN_MSG_MAP和END_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()

需求

標頭: atlwin.h

FORWARD_NOTIFICATIONS

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

FORWARD_NOTIFICATIONS()

備註

將此巨集指定為訊息對應的一部分。

需求

標頭: atlwin.h

MESSAGE_HANDLER

定義訊息對應中的專案。

MESSAGE_HANDLER( msg, func )

參數

msg
[in]Windows 訊息。

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

備註

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

MESSAGE_HANDLER 巨集中指定的任何函式都必須定義如下:

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

在呼叫 之前MessageHandler,訊息對應會設定bHandled為 TRUE。 如果未 MessageHandler 完全處理訊息,它應該設定 bHandled 為 FALSE,表示訊息需要進一步處理。

注意

一律使用 BEGIN_MSG_MAP開始訊息對應。 接著,您可以使用 ALT_MSG_MAP 來宣告後續的替代訊息對應END_MSG_MAP巨集標示訊息對應的結尾。 每個訊息對應都必須只有一個實例BEGIN_MSG_MAP和END_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;   
   }
};

需求

標頭: atlwin.h

MESSAGE_RANGE_HANDLER

類似於 MESSAGE_HANDLER,但會將一系列 Windows 訊息對應至單一處理程式函式。

MESSAGE_RANGE_HANDLER( msgFirst, msgLast, func )

參數

msgFirst
[in]標記連續訊息範圍的開頭。

msgLast
[in]標記連續訊息範圍的結尾。

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

需求

標頭: atlwin.h

NOTIFY_CODE_HANDLER

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

NOTIFY_CODE_HANDLER(cd, func)

參數

cd
[in]通知碼。

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

需求

標頭: atlwin.h

NOTIFY_HANDLER

定義訊息對應中的專案。

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

在呼叫 之前NotifyHandler,訊息對應會設定bHandled為 TRUE。 如果未 NotifyHandler 完全處理訊息,它應該設定 bHandled 為 FALSE,表示訊息需要進一步處理。

注意

一律使用 BEGIN_MSG_MAP開始訊息對應。 接著,您可以使用 ALT_MSG_MAP 來宣告後續的替代訊息對應END_MSG_MAP巨集標示訊息對應的結尾。 每個訊息對應都必須只有一個實例BEGIN_MSG_MAP和END_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*/);
};

需求

標頭: atlwin.h

NOTIFY_ID_HANDLER

類似於 NOTIFY_HANDLER,但只會根據控件標識碼對應 WM_NOTIFY 訊息。

NOTIFY_ID_HANDLER( id, func )

參數

id
[in]傳送訊息之控件的標識碼。

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

需求

標頭: atlwin.h

NOTIFY_RANGE_CODE_HANDLER

類似於NOTIFY_RANGE_HANDLER,但會將WM_NOTIFY訊息與特定通知碼從一系列控件對應到單一處理程式函式。

NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )

參數

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

idLast
[in]標記連續控制標識碼範圍的結尾。

cd
[in]通知碼。

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

備註

此範圍是以傳送訊息之控件的標識碼為基礎。

需求

標頭: atlwin.h

NOTIFY_RANGE_HANDLER

類似於NOTIFY_HANDLER,但會將WM_NOTIFY來自一系列控件的訊息對應至單一處理程式函式。

NOTIFY_RANGE_HANDLER( idFirst, idLast, func )

參數

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

idLast
[in]標記連續控制標識碼範圍的結尾。

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

備註

此範圍是以傳送訊息之控件的標識碼為基礎。

需求

標頭: atlwin.h

REFLECT_NOTIFICATIONS

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

REFLECT_NOTIFICATIONS()

備註

將此巨集指定為父視窗訊息對應的一部分。

需求

標頭: atlwin.h

REFLECTED_COMMAND_CODE_HANDLER

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

REFLECTED_COMMAND_CODE_HANDLER( code, func )

參數

code
[in]通知碼。

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

需求

標頭: atlwin.h

REFLECTED_COMMAND_HANDLER

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

REFLECTED_COMMAND_HANDLER( id, code, func )

參數

id
[in]功能表項、控件或快捷鍵的標識碼。

code
[in]通知碼。

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

需求

標頭: atlwin.h

REFLECTED_COMMAND_ID_HANDLER

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

REFLECTED_COMMAND_ID_HANDLER( id, func )

參數

id
[in]功能表項、控件或快捷鍵的標識碼。

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

需求

標頭: atlwin.h

REFLECTED_COMMAND_RANGE_CODE_HANDLER

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

REFLECTED_COMMAND_RANGE_CODE_HANDLER( idFirst, idLast, code, func )

參數

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

idLast
[in]標記連續控制標識碼範圍的結尾。

code
[in]通知碼。

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

需求

標頭: atlwin.h

REFLECTED_COMMAND_RANGE_HANDLER

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

REFLECTED_COMMAND_RANGE_HANDLER( idFirst, idLast, func )

參數

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

idLast
[in]標記連續控制標識碼範圍的結尾。

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

需求

標頭: atlwin.h

REFLECTED_NOTIFY_CODE_HANDLER

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

REFLECTED_NOTIFY_CODE_HANDLER_EX( cd, func )

參數

cd
[in]通知碼。

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

需求

標頭: atlwin.h

REFLECTED_NOTIFY_HANDLER

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

REFLECTED_NOTIFY_HANDLER( id, cd, func )

參數

id
[in]功能表項、控件或快捷鍵的標識碼。

cd
[in]通知碼。

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

需求

標頭: atlwin.h

REFLECTED_NOTIFY_ID_HANDLER

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

REFLECTED_NOTIFY_ID_HANDLER( id, func )

參數

id
[in]功能表項、控件或快捷鍵的標識碼。

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

需求

標頭: atlwin.h

REFLECTED_NOTIFY_RANGE_CODE_HANDLER

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

REFLECTED_NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )

參數

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

idLast
[in]標記連續控制標識碼範圍的結尾。

cd
[in]通知碼。

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

需求

標頭: atlwin.h

REFLECTED_NOTIFY_RANGE_HANDLER

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

REFLECTED_NOTIFY_RANGE_HANDLER( idFirst, idLast, func )

參數

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

idLast
[in]標記連續控制標識碼範圍的結尾。

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

另請參閱

巨集