事件對應
每當控制項要通知其容器已發生一些動作 (例如按鍵動作、滑鼠點選或變更為控制項的狀態) 時 (由控制項開發人員決定),會呼叫引發事件函式。 這個函式會透過引發相關事件,來通知控制項容器已發生一些重要動作。
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_UIACTIVATE是標準動詞的一些範例。
如需函式原型的描述,請參閱ON_OLEVERB做為 memberFxn 參數。
需求
標頭 afxole.h