複合控制項巨集
這些巨集會定義事件接收對應和專案。
Macro | 描述 |
---|---|
BEGIN_SINK_MAP | 標記複合控件的事件接收對應開頭。 |
END_SINK_MAP | 標記複合控件的事件接收對應結尾。 |
SINK_ENTRY | 事件接收對應的專案。 |
SINK_ENTRY_EX | 具有額外參數的事件接收對應專案。 |
SINK_ENTRY_EX_P | (Visual Studio 2017)類似於SINK_ENTRY_EX,不同之處在於它會使用 iid 的指標。 |
SINK_ENTRY_INFO | 事件接收對應的專案,其中包含手動提供的型別資訊,以搭配 IDispEventSimpleImpl 使用。 |
SINK_ENTRY_INFO_P | (Visual Studio 2017)類似於SINK_ENTRY_INFO,不同之處在於它會使用 iid 的指標。 |
需求
標頭: atlcom.h
BEGIN_SINK_MAP
宣告複合控件的事件接收對應開頭。
BEGIN_SINK_MAP(_class)
參數
_類
[in]指定控制項。
範例
BEGIN_SINK_MAP(CMyCompositeCtrl)
//Make sure the Event Handlers have __stdcall calling convention
SINK_ENTRY(IDC_CALENDAR1, DISPID_CLICK, &CMyCompositeCtrl::ClickCalendar1)
SINK_ENTRY(IDC_CALENDAR2, DISPID_CLICK, &CMyCompositeCtrl::ClickCalendar2)
END_SINK_MAP()
備註
ActiveX 事件接收的 CE ATL 實作僅支援從事件處理程式方法傳回 HRESULT 或 void 類型的傳回值。 不支援任何其他傳回值,且其行為未定義。
END_SINK_MAP
宣告複合控件的事件接收對應結尾。
END_SINK_MAP()
範例
BEGIN_SINK_MAP(CMyCompositeCtrl)
//Make sure the Event Handlers have __stdcall calling convention
SINK_ENTRY(IDC_CALENDAR1, DISPID_CLICK, &CMyCompositeCtrl::ClickCalendar1)
SINK_ENTRY(IDC_CALENDAR2, DISPID_CLICK, &CMyCompositeCtrl::ClickCalendar2)
END_SINK_MAP()
備註
ActiveX 事件接收的 CE ATL 實作僅支援從事件處理程式方法傳回 HRESULT 或 void 類型的傳回值。 不支援任何其他傳回值,且其行為未定義。
SINK_ENTRY
宣告由id所識別之控件之指定事件 (dispid) 的處理程式函式 (fn)。
SINK_ENTRY( id, dispid, fn )
參數
id
[in]識別控制項。
dispid
[in]識別指定的事件。
fn
[in]事件處理程式函式的名稱。 此函式必須使用 _stdcall
呼叫慣例,並具有適當的 dispinterface 樣式簽章。
範例
BEGIN_SINK_MAP(CMyCompositeCtrl)
//Make sure the Event Handlers have __stdcall calling convention
SINK_ENTRY(IDC_CALENDAR1, DISPID_CLICK, &CMyCompositeCtrl::ClickCalendar1)
SINK_ENTRY(IDC_CALENDAR2, DISPID_CLICK, &CMyCompositeCtrl::ClickCalendar2)
END_SINK_MAP()
備註
ActiveX 事件接收的 CE ATL 實作僅支援從事件處理程式方法傳回 HRESULT 或 void 類型的傳回值。 不支援任何其他傳回值,且其行為未定義。
SINK_ENTRY_EX和SINK_ENTRY_EX_P
針對id所識別的控制項,宣告所指定事件 (dispid) 的處理程式函式 (dispid), 表示分派介面 (iid)。
SINK_ENTRY_EX( id, iid, dispid, fn )
SINK_ENTRY_EX_P( id, piid, dispid, fn ) // (Visual Studio 2017)
參數
id
[in]識別控制項。
iid
[in]識別分派介面。
piid
[in]分派介面的指標。
dispid
[in]識別指定的事件。
fn
[in]事件處理程式函式的名稱。 此函式必須使用 _stdcall
呼叫慣例,並具有適當的 dispinterface 樣式簽章。
範例
BEGIN_SINK_MAP(CMyCompositCtrl2)
//Make sure the Event Handlers have __stdcall calling convention
SINK_ENTRY_EX(IDC_CALENDAR1, __uuidof(DCalendarEvents), DISPID_CLICK,
&CMyCompositCtrl2::ClickCalendar1)
SINK_ENTRY_EX(IDC_CALENDAR2, __uuidof(DCalendarEvents), DISPID_CLICK,
&CMyCompositCtrl2::ClickCalendar2)
END_SINK_MAP()
備註
ActiveX 事件接收的 CE ATL 實作僅支援從事件處理程式方法傳回 HRESULT 或 void 類型的傳回值。 不支援任何其他傳回值,且其行為未定義。
SINK_ENTRY_INFO和SINK_ENTRY_INFO_P
使用事件接收對應內的 SINK_ENTRY_INFO 巨集,提供 IDispEventSimpleImpl 所需的資訊,以將事件路由傳送至相關的處理程式函式。
SINK_ENTRY_INFO( id, iid, dispid, fn, info )
SINK_ENTRY_INFO_P( id, piid, dispid, fn, info ) // (Visual Studio 2017)
參數
id
[in]識別事件來源的無符號整數。 此值必須符合相關 IDispEventSimpleImpl 基類中使用的 nID 範本參數。
iid
[in]識別分派介面的 IID。
piid
[in]識別分派介面的 IID 指標。
dispid
[in]識別指定事件的 DISPID。
fn
[in]事件處理程式函式的名稱。 此函式必須使用 _stdcall
呼叫慣例,並具有適當的 dispinterface 樣式簽章。
資訊
[in]事件處理程式函式的類型資訊。 這個類型資訊是以結構的指標 _ATL_FUNC_INFO
形式提供。 CC_CDECL是結構之 CALLCONV 欄位 _ATL_FUNC_INFO
之 Windows CE 中唯一支援的選項。 不支援任何其他值,因此其行為未定義。
備註
前四個巨集參數與SINK_ENTRY_EX巨集的參數相同。 最後一個參數會提供事件的類型資訊。 ActiveX 事件接收的 CE ATL 實作僅支援從事件處理程式方法傳回 HRESULT 或 void 類型的傳回值。 不支援任何其他傳回值,且其行為未定義。