事件接收對應
當內嵌的 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
回型別和 UINT
和 BOOL*
參數。 函式應將 參數設定為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