共用方式為


事件接收對應

當內嵌的 OLE Automation 控制項引發某個事件時,控制項的容器會使用由 MFC 提供的機制 (稱為「事件接收對應」) 來接收事件。 這個事件接收對應會指定每個特定事件的處理常式,以及那些事件函式的參數。 如需事件接收對應的詳細資訊,請參閱 ActiveX 控件容器一文

事件接收對應

名稱 描述
BEGIN_EVENTSINK_MAP 事件接收對應定義的開頭。
DECLARE_EVENTSINK_MAP 宣告事件接收對應。
END_EVENTSINK_MAP 事件接收對應定義的結尾。
ON_EVENT 定義特定事件的事件處理常式。
ON_EVENT_RANGE 定義一組 OLE 控制項所引發特定事件的事件處理常式。
ON_EVENT_REFLECT 在由控制項的容器處理之前,接收控制項引發的事件。
ON_PROPNOTIFY 定義一個處理常式來處理 OLE 控制項的屬性通知。
ON_PROPNOTIFY_RANGE 定義一個處理常式來處理來自一組 OLE 控制項的屬性通知。
ON_PROPNOTIFY_REFLECT 在由控制項的容器處理前,接收控制項傳送的屬性通知。

BEGIN_EVENTSINK_MAP

開始事件接收對應的定義。

BEGIN_EVENTSINK_MAP(theClass, baseClass)

參數

theClass
指定事件接收對應為的控件類別名稱。

baseClass
指定Class基類名稱。

備註

在定義類別成員函式的實作 (.cpp) 檔案中,使用 BEGIN_EVENTSINK_MAP 巨集啟動事件接收對應,然後為每個事件新增要通知的巨集專案,並使用 END_EVENTSINK_MAP 巨集完成事件接收對應。

如需事件接收對應和 OLE 控件容器的詳細資訊,請參閱 ActiveX 控件容器一文

需求

標頭 afxdisp.h

DECLARE_EVENTSINK_MAP

OLE 容器可以提供事件接收對應,以指定您的容器將會收到通知的事件。

DECLARE_EVENTSINK_MAP()

備註

在類別宣告結尾使用 DECLARE_EVENTSINK_MAP 巨集。 然後在中。定義 類別成員函式的 CPP 檔案、使用BEGIN_EVENTSINK_MAP巨集、要通知之每個事件的巨集專案,以及宣告事件接收清單結尾的END_EVENTSINK_MAP巨集。

如需事件接收對應的詳細資訊,請參閱 ActiveX 控件容器一文

需求

標頭 afxwin.h

END_EVENTSINK_MAP

結束您的事件接收器對應的定義。

END_EVENTSINK_MAP()

需求

標頭 afxdisp.h

ON_EVENT

使用 ON_EVENT 巨集來定義 OLE 控制項所引發事件的事件處理程式函式。

ON_EVENT(theClass, id, dispid, pfnHandler,  vtsParams)

參數

theClass
這個事件接收對應所屬的類別。

id
OLE 控件的控件標識碼。

dispid
控件引發之事件的分派標識符。

pfnHandler
處理事件的成員函式指標。 此函式應該具有 BOOL 傳回類型,以及符合事件參數的參數類型(請參閱 vtsParams)。 函式應該會傳回 TRUE,以指出已處理事件;否則為 FALSE。

vtsParams
指定事件參數類型的VTS_常數序列。 這些是分派對應專案中使用的相同常數,例如DISP_FUNCTION。

備註

vtsParams 自變數是VTS_常數中以空格分隔的值清單。 以空格分隔的其中一或多個值(不是逗號)會指定函式的參數清單。 例如:

VTS_I2 VTS_BOOL

指定清單,其中包含簡短整數,後面接著BOOL。

如需VTS_常數的清單,請參閱EVENT_CUSTOM

需求

標頭 afxdisp.h

ON_EVENT_RANGE

使用 ON_EVENT_RANGE 巨集,針對任何在連續標識符範圍內具有控件標識碼的 OLE 控制件所引發的事件,定義事件處理程式函式。

ON_EVENT_RANGE(theClass, idFirst, idLast, dispid, pfnHandler,  vtsParams)

參數

theClass
這個事件接收對應所屬的類別。

idFirst
範圍中第一個 OLE 控件的控件識別碼。

idLast
範圍中最後一個 OLE 控制件的控件識別碼。

dispid
控件引發之事件的分派標識符。

pfnHandler
處理事件的成員函式指標。 此函式應該有 BOOL 傳回類型、UINT 類型的第一個參數(適用於控件識別符),以及符合事件參數的其他參數類型(請參閱 vtsParams)。 函式應該會傳回 TRUE,以指出已處理事件;否則為 FALSE。

vtsParams
指定事件參數類型的VTS_常數序列。 第一個常數的類型應該是控件標識碼VTS_I4。 這些是分派對應專案中使用的相同常數,例如DISP_FUNCTION。

備註

vtsParams 自變數是VTS_常數中以空格分隔的值清單。 以空格分隔的其中一或多個值(不是逗號)會指定函式的參數清單。 例如:

VTS_I2 VTS_BOOL

指定清單,其中包含簡短整數,後面接著BOOL。

如需VTS_常數的清單,請參閱EVENT_CUSTOM

範例

下列範例示範針對三個控件實作的 MouseDown 事件的事件處理程式(IDC_MYCTRL1到IDC_MYCTRL3)。 事件處理程式函 OnRangeMouseDown式會在對話框類別 ( CMyDlg) 的標頭檔中宣告為:

BOOL OnRangeMouseDown(UINT CtlID, short MouseButton, short Shift,
   long x, long y);

下列程式代碼定義於對話類別的實作檔案中。

BEGIN_EVENTSINK_MAP(CMyDlg, CDialog)
   ON_EVENT_RANGE(CMyDlg, IDC_MYCTRL1, IDC_MYCTRL3, -605, OnRangeMouseDown,
      VTS_I4 VTS_I2 VTS_I2 VTS_I4 VTS_I4)
END_EVENTSINK_MAP()

需求

標頭 afxdisp.h

ON_EVENT_REFLECT

ON_EVENT_REFLECT巨集,當用於 OLE 控件包裝函式類別的事件接收對應時,會先接收控件所引發的事件,再由控件的容器處理它們。

ON_EVENT_REFLECT(theClass,  dispid, pfnHandler,  vtsParams)

參數

theClass
這個事件接收對應所屬的類別。

dispid
控件引發之事件的分派標識符。

pfnHandler
處理事件的成員函式指標。 此函式應該具有符合事件參數的 BOOL 傳回類型和參數類型(請參閱 vtsParams)。 函式應該會傳回 TRUE,以指出已處理事件;否則為 FALSE。

vtsParams
指定事件參數類型的VTS_常數序列。 這些是分派對應專案中使用的相同常數,例如DISP_FUNCTION。

備註

vtsParams 自變數是VTS_常數中以空格分隔的值清單。

以空格分隔的其中一或多個值(不是逗號)會指定函式的參數清單。 例如:

VTS_I2 VTS_BOOL

指定清單,其中包含簡短整數,後面接著BOOL。

如需VTS_常數的清單,請參閱EVENT_CUSTOM

需求

標頭 afxdisp.h

ON_PROPNOTIFY

使用 ON_PROPNOTIFY 巨集來定義事件接收對應專案,以處理來自 OLE 控件的屬性通知。

ON_PROPNOTIFY(theClass, id, dispid, pfnRequest, pfnChanged)

參數

theClass
這個事件接收對應所屬的類別。

id
OLE 控件的控件標識碼。

dispid
通知中涉及之屬性的分派標識碼。

pfnRequest
處理 OnRequestEdit 此屬性之通知的成員函式指標。 此函式應該具有 BOOL 傳回型別和 BOOL* 參數。 此函式應將 參數設定為TRUE,以允許屬性變更,而 FALSE 則不允許。 函式應該會傳回 TRUE,以指出已處理通知;否則為 FALSE。

pfnChanged
處理 OnChanged 此屬性之通知的成員函式指標。 函式應該有 BOOL 傳回型別和 UINT 參數。 函式應傳回 TRUE,表示已處理通知;否則為 FALSE。

備註

vtsParams 自變數是VTS_常數中以空格分隔的值清單。 以空格分隔的其中一或多個值(不是逗號)會指定函式的參數清單。 例如:

VTS_I2 VTS_BOOL

指定清單,其中包含簡短整數,後面接著BOOL。

如需VTS_常數的清單,請參閱EVENT_CUSTOM

ON_PROPNOTIFY_RANGE

使用 ON_PROPNOTIFY_RANGE 巨集來定義事件接收對應專案,以處理任何在連續標識符範圍內具有控件識別碼的 OLE 控制件的屬性通知。

ON_PROPNOTIFY_RANGE(theClass, idFirst, idLast, dispid, pfnRequest, pfnChanged)

參數

theClass
這個事件接收對應所屬的類別。

idFirst
範圍中第一個 OLE 控件的控件識別碼。

idLast
範圍中最後一個 OLE 控制件的控件識別碼。

dispid
通知中涉及之屬性的分派標識碼。

pfnRequest
處理 OnRequestEdit 此屬性之通知的成員函式指標。 此函式應該有傳 BOOL 回型別和 UINTBOOL* 參數。 函式應將 參數設定為TRUE,以允許屬性變更,而 FALSE 則不允許。 函式應傳回 TRUE,表示已處理通知;否則為 FALSE。

pfnChanged
處理 OnChanged 此屬性之通知的成員函式指標。 函式應該具有傳 BOOL 回型別和 UINT 參數。 函式應傳回 TRUE,表示已處理通知;否則為 FALSE。

需求

標頭 afxdisp.h

ON_PROPNOTIFY_REFLECT

在 OLE 控制項包裝函式類別的事件接收對應中使用 ON_PROPNOTIFY_REFLECT 巨集時,會先接收控制項所傳送的屬性通知,再由控件的容器處理它們。

ON_PROPNOTIFY_REFLECT(theClass, dispid, pfnRequest, pfnChanged)

參數

theClass
這個事件接收對應所屬的類別。

dispid
通知中涉及之屬性的分派標識碼。

pfnRequest
處理 OnRequestEdit 此屬性之通知的成員函式指標。 此函式應該具有 BOOL 傳回型別和 BOOL* 參數。 此函式應將 參數設定為TRUE,以允許屬性變更,而 FALSE 則不允許。 函式應該會傳回 TRUE,以指出已處理通知;否則為 FALSE。

pfnChanged
處理 OnChanged 此屬性之通知的成員函式指標。 函式應該有 BOOL 傳回型別,而且沒有參數。 函式應該會傳回 TRUE,以指出已處理通知;否則為 FALSE。

需求

標頭 afxdisp.h

另請參閱

巨集和全域