事件對應
每當控制項要通知其容器已發生一些動作 (例如按鍵動作、滑鼠點選或變更為控制項的狀態) 時 (由控制項開發人員決定),會呼叫引發事件函式。 這個函式會透過引發相關事件,來通知控制項容器已發生一些重要動作。
MFC 程式庫會針對引發事件提供最佳化的程式設計模型。 在這個模型中,是使用「事件對應」來指定要對特定控制項由哪些函式來引發哪些事件。 事件對應對於每個事件都會包含一個巨集。 例如,引發內建 Click 事件的事件對應可能如下所示:
BEGIN_EVENT_MAP(CMyAxCtrl, COleControl)
EVENT_STOCK_CLICK()
END_EVENT_MAP()
宏 EVENT_STOCK_CLICK
表示控制項會在每次偵測到滑鼠按一下時引發 Stock Click 事件。 如需其他庫存事件的詳細清單,請參閱 ActiveX 控制項:事件 一文 。 巨集也可用於表示自訂事件。
雖然事件對應巨集很重要,但您通常不會直接將它們插入。 這是因為當您 使用它將事件引發函式與事件產生關聯時,[類別 檢視 ] 視窗會自動 在來源檔案中建立事件對應專案。 每當您想要編輯或新增事件對應專案時,都可以使用 [ 屬性 ] 視窗。
為支援事件對應,MFC 提供下列巨集:
事件對應宏
事件對應宣告和區分
名稱 | 描述 |
---|---|
DECLARE_EVENT_MAP | 宣告事件對應將用於類別中,以將事件對應至事件引發函式 (必須在類別宣告中使用)。 |
BEGIN_EVENT_MAP | 開始事件對應的定義 (必須在類別實作中使用)。 |
END_EVENT_MAP | 結束事件對應的定義 (必須在類別實作中使用)。 |
事件對應巨集
名稱 | 描述 |
---|---|
EVENT_CUSTOM | 指出將引發指定事件的事件引發函式。 |
EVENT_CUSTOM_ID | 使用指定的分派 ID,指出將引發指定事件的事件引發函式。 |
訊息對應巨集
名稱 | 描述 |
---|---|
ON_OLEVERB | 指出由 OLE 控制項處理的自訂動詞。 |
ON_STDOLEVERB | 覆寫 OLE 控制項的標準動詞對應。 |
DECLARE_EVENT_MAP
COleControl
程式中的每個衍生類別都可以提供事件對應,以指定控制項將引發的事件。
DECLARE_EVENT_MAP()
備註
在類別宣告結尾使用DECLARE_EVENT_MAP宏。 然後,在定義 類別成員函式的 .cpp 檔案中,使用BEGIN_EVENT_MAP宏、每個控制項事件的宏專案,以及END_EVENT_MAP宏來宣告事件清單的結尾。
如需事件對應的詳細資訊,請參閱 ActiveX 控制項:事件 一文 。
需求
標頭 afxctl.h
BEGIN_EVENT_MAP
開始事件對應的定義。
BEGIN_EVENT_MAP(theClass, baseClass)
參數
theClass
指定事件對應為的控制項類別名稱。
baseClass
指定Class 的 基類名稱。
備註
在定義類別成員函式的實作 (.cpp) 檔案中,使用 BEGIN_EVENT_MAP 宏啟動事件對應,然後新增每個事件的宏專案,並使用 END_EVENT_MAP 宏完成事件對應。
如需事件對應和BEGIN_EVENT_MAP宏的詳細資訊,請參閱 ActiveX Controls:Events 一文 。
需求
標頭 afxctl.h
END_EVENT_MAP
使用 END_EVENT_MAP 宏結束事件對應的定義。
END_EVENT_MAP()
需求
標頭 afxctl.h
EVENT_CUSTOM
定義自訂事件的事件對應專案。
EVENT_CUSTOM(pszName, pfnFire, vtsParams)
參數
pszName
事件的名稱。
pfnFire
事件引發函式的名稱。
vtsParams
一個或多個常數的空間分隔清單,指定函式的參數清單。
備註
vtsParams 參數是常數中以空格分隔的值 VTS_
清單。 以空格分隔的其中一或多個值(不是逗號)會指定函式的參數清單。 例如:
VTS_COLOR VTS_FONT
指定清單,其中包含代表 RGB 色彩值的 32 位整數,後面接著 OLE 字型物件的介面指標 IFontDisp
。
VTS_
常數及其意義如下:
符號 | 參數類型 |
---|---|
VTS_I2 | short |
VTS_I4 | long |
VTS_R4 | float |
VTS_R8 | double |
VTS_COLOR | OLE_COLOR |
VTS_CY | CURRENCY |
VTS_DATE | 日期 |
VTS_BSTR | const 字元* |
VTS_DISPATCH | LPDISPATCH |
VTS_FONT | IFontDispatch* |
VTS_HANDLE | HANDLE |
VTS_SCODE | SCODE |
VTS_BOOL | BOOL |
VTS_VARIANT | const VARIANT* |
VTS_PVARIANT | VARIANT* |
VTS_UNKNOWN | LPUNKNOWN |
VTS_OPTEXCLUSIVE | OLE_OPTEXCLUSIVE |
VTS_PICTURE | IPictureDisp* |
VTS_TRISTATE | OLE_TRISTATE |
VTS_XPOS_PIXELS | OLE_XPOS_PIXELS |
VTS_YPOS_PIXELS | OLE_YPOS_PIXELS |
VTS_XSIZE_PIXELS | OLE_XSIZE_PIXELS |
VTS_YSIZE_PIXELS | OLE_YSIZE_PIXELS |
TS_XPOS_HIMETRIC | OLE_XPOS_HIMETRIC |
VTS_YPOS_HIMETRIC | OLE_YPOS_HIMETRIC |
VTS_XSIZE_HIMETRIC | OLE_XSIZE_HIMETRIC |
VTS_YSIZE_HIMETRIC | OLE_YSIZE_HIMETRIC |
注意
除了VTS_FONT和VTS_PICTURE之外,已針對所有變體類型定義其他變體常數,以提供變數資料常數的指標。 這些常數是使用 VTS_Pconstantname
慣例來命名。 例如,VTS_PCOLOR是VTS_COLOR常數的指標。
需求
標頭 afxctl.h
EVENT_CUSTOM_ID
定義屬於 dispid 所 指定分派識別碼的自訂事件引發函式。
EVENT_CUSTOM_ID(
pszName,
dispid,
pfnFire,
vtsParams)
參數
pszName
事件的名稱。
dispid
引發事件時,控制項所使用的分派識別碼。
pfnFire
事件引發函式的名稱。
vtsParams
引發事件時傳遞至控制容器的參數變數清單。
備註
vtsParams 引數是常數中以空格分隔的值 VTS_
清單。 其中一或多個以空格分隔的值,而不是逗號,會指定函式的參數清單。 例如:
VTS_COLOR VTS_FONT
指定清單,其中包含代表 RGB 色彩值的 32 位整數,後面接著 OLE 字型物件的介面指標 IFontDisp
。
如需常數清單 VTS_
,請參閱 EVENT_CUSTOM 。
需求
標頭 afxctl.h
ON_OLEVERB
此宏會定義訊息對應專案,將自訂動詞對應至控制項的特定成員函式。
ON_OLEVERB(idsVerbName, memberFxn)
參數
idsVerbName
動詞名稱的字串資源識別碼。
memberFxn
當叫用動詞時,由框架呼叫的函式。
備註
資源編輯器可用來建立新增至字串資料表的自訂動詞名稱。
memberFxn 的函式 原型為:
BOOL memberFxn(
LPMSG lpMsg,
HWND hWndParent,
LPCRECT lpRect);
lpMsg 、 hWndParent 和 lpRect 參數的值 取自成員函式的 IOleObject::DoVerb
對應參數。
需求
標頭 afxole.h
ON_STDOLEVERB
使用這個巨集覆寫標準動詞的預設行為。
ON_STDOLEVERB(iVerb, memberFxn)
參數
iVerb
被覆寫之動詞的標準動詞索引。
memberFxn
當叫用動詞時,由框架呼叫的函式。
備註
標準動詞索引的格式 OLEIVERB_
為 ,後面接著動作。 OLEIVERB_SHOW、OLEIVERB_HIDE和OLEIVERB_UIACTI加值稅E是標準動詞的一些範例。
如需函式 原型的描述,請參閱 ON_OLEVERB做為 memberFxn 參數。
需求
標頭 afxole.h
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應