庫存事件與自定義事件不同,因為 類別 COleControl 會自動引發事件。
COleControl 包含預先定義的成員函式,這些函式會引發常見動作所產生的事件。 執行的 COleControl 一些常見動作包括單擊和雙擊控件、鍵盤事件,以及滑鼠按鈕狀態的變更。 股票事件的事件映射項目始終以EVENT_STOCK作為前綴。
新增事件精靈支持的庫存事件
類別 COleControl 提供下表所列的十個庫存事件。 您可以使用 [ 新增事件精靈] 在控件中指定您想要的事件。
股票事件
| 事件 | 觸發函式 | 評論 |
|---|---|---|
| 點擊 | void FireClick( ) | 當控件擷取滑鼠時引發,任何 BUTTONUP (左、中間或右)訊息都已收到,且按鈕會在控件上放開。 此事件之前會發生預設的 MouseDown 和 MouseUp 事件。 事件映射條目: EVENT_STOCK_CLICK( ) |
| DblClick | void FireDblClick( ) | 類似於 Click,但在收到 BUTTONDBLCLK 訊息時引發。 事件對應條目: EVENT_STOCK_DBLCLICK( ) |
| 錯誤 |
void FireError(SCODEscode, LPCSTRlpszDescription, UINTnHelpID= 0 ) |
在方法呼叫或屬性存取範圍以外的 ActiveX 控件內發生錯誤時引發。 事件映射項目: EVENT_STOCK_ERROREVENT( ) |
| KeyDown |
void FireKeyDown(shortnChar, shortnShiftState) |
接收到 WM_SYSKEYDOWN 或 WM_KEYDOWN 訊息時引發。事件映射條目: EVENT_STOCK_KEYDOWN( ) |
| KeyPress |
void FireKeyPress( short*pnChar) |
收到訊息時,WM_CHAR 會被觸發。事件映射條目:EVENT_STOCK_KEYPRESS() |
| KeyUp |
void FireKeyUp(shortnCharnShiftState) |
接收到 WM_SYSKEYUP 或 WM_KEYUP 訊息時引發。事件映射項目:EVENT_STOCK_KEYUP( ) |
| MouseDown |
void FireMouseDown( shortnButtonnShiftState, floatx, floaty) |
收到任何 BUTTONDOWN (左鍵、中鍵或右鍵)時會執行。 在此事件引發之前,滑鼠會立即被擷取。 事件項目: EVENT_STOCK_MOUSEDOWN( ) |
| 滑鼠移動 |
void FireMouseMove(shortnButtonnShiftState, floatx, floaty) |
收到WM_MOUSEMOVE訊息時引發。 事件對應專案: EVENT_STOCK_MOUSEMOVE( ) |
| MouseUp |
void FireMouseUp(nButtonnShiftState, floatx, floaty) |
如果接收到任何 BUTTONUP (左、中或右),就會被觸發。 在引發此事件之前,會釋放滑鼠擷取。 事件地圖項目: EVENT_STOCK_MOUSEUP() |
| 就緒狀態改變 | void FireReadyStateChange( ) | 當控制元件由於接收到的數據量而轉換到下一個就緒狀態時觸發。 事件映射條目:EVENT_STOCK_READYSTATECHANGE() |
使用新增事件精靈新增股票事件
新增庫存事件比新增自定義事件還少,因為基類 COleControl會自動處理實際事件的引發。 下列程式會將股票事件新增至使用 MFC ActiveX 控件精靈開發的控件。 按下鍵且控件處於活動狀態時,會引發名為 KeyPress 的事件。 此程式也可以用來新增其他庫存事件。 將選取的股票事件名稱取代為 KeyPress。
使用新增事件精靈來新增 KeyPress 預設事件
載入您的控件專案。
在 [類別檢視] 中,以滑鼠右鍵按下您的 ActiveX 控件類別,以開啟快捷方式功能表。
從快捷方式功能表中,按兩下 [ 新增 ],然後按下 [ 新增事件]。
這會開啟 [新增事件精靈]。
在 [ 事件名稱] 下拉式清單中,選取
KeyPress。按一下完成。
新增庫存事件的事件精靈變更
由於庫存事件是由控件的基類處理,因此[新增事件精靈] 不會以任何方式變更您的類別宣告。 它會將事件新增至控制元件的事件映射,並在其 .IDL 檔案中建立條目。 下列這一行會新增至控制項的事件對應,其位於控制項類別實作中的 (.CPP) 檔案中:
EVENT_STOCK_KEYPRESS()
當收到 WM_CHAR 訊息且控件處於使用中時,加入這段程式碼會觸發 KeyPress 事件。 從控件程式代碼中呼叫其引發函式,例如, FireKeyPress可以在其他時間引發KeyPress事件。
[新增事件精靈] 會將下列程式代碼行新增至 控件的 。IDL 檔案:
[id(DISPID_KEYPRESS)] void KeyPress(SHORT* KeyAscii);
這一行會將 KeyPress 事件與其標準分派標識碼產生關聯,並允許容器預期 KeyPress 事件。