事件也稱爲消息。web
ActiveX 控件使用事件來通知發生到控件的容器。 事件的常見示例包括單擊在控件上,輸入在控件的狀態中使用鍵盤和更改的數據。 這些操做發生時,該控件觸發事件以提醒容器。
事件也稱爲消息。
MFC 支持兩種類型的事件: 經常使用和自定義。 經常使用事件是事件的類COleControl會自動處理。 經常使用事件的完整列表,請參閱文章MFC ActiveX 控件:添加經常使用事件。 自定義事件使控件可以在特定於該控件的操做發生時通知該容器。 一些示例是一個控件的內部狀態或在某些窗口消息接收更改。
爲您正確地引起事件的控制,你的控件類必須映射到相關的事件發生時,應調用的成員函數的控件的每一個事件。 此映射機制 (稱爲事件映射) 集中了有關事件的信息,並容許 Visual Studio 輕鬆訪問和操做該控件的事件。 下面的宏,位於標頭中聲明此事件映射 (.H) 文件的控件類聲明:svg
DECLARE_EVENT_MAP()
聲明事件映射後,它必須在定義控件的實現 (.CPP) 文件。 如下代碼行定義事件映射,從而容許您控制觸發特定事件:函數
BEGIN_EVENT_MAP(CCreateOcxDemoCtrl, COleControl) END_EVENT_MAP()
若是您使用 MFC ActiveX 控件嚮導建立項目,它會自動添加這些行。 若是不使用 MFC ActiveX 控件嚮導,則必須手動添加這些行。
類視圖,則你能夠添加類支持的經常使用事件COleControl或你定義的自定義事件。 對於每一個新的事件,類視圖會自動將相應的條目添加到控件的事件映射和控件的。IDL 文件。
下面討論了事件的詳細信息:spa
經常使用事件不一樣於自定義事件,它們會自動觸發由類COleControl。 COleControl 包含引起事件致使的常見操做的預約義的成員函數。 由實現的一些常見操做COleControl包括單-和當時的 clicks 控件、 鍵盤事件和更改鼠標按鈕的狀態。 條件映射經常使用事件始終使用 EVENT_STOCK 前綴開頭。code
COleControl類提供了下表中列出的十個經常使用事件。你能夠經過事件添加嚮導在你的控件中添加你想使用的事件。
經常使用事件xml
事件名稱 | 觸發函數 | 註釋 |
---|---|---|
Click | void FireClick( ) | 觸發時控制捕獲鼠標,任何BUTTONUP接收 (左側、 中間或右側) 消息,並在控件上釋放該按鈕。 此事件以前發生的經常使用鼠標按下和 MouseUp 事件。事件映射條目:EVENT_STOCK_CLICK( ) |
DblClick | void FireDblClick( ) | 當接收到BUTTONDBLCLK消息,相似於單擊事件。事件映射條目:EVENT_STOCK_DBLCLICK( ) |
Error | void FireError( SCODE scode , LPCSTR lpszDescription , UINT nHelpID = 0 ) | 當將範圍以外的方法調用或屬性訪問 ActiveX 控件中發生錯誤時引起。事件映射條目: EVENT_STOCK_ERROREVENT( ) |
KeyDown | void FireKeyDown( short nChar , short nShiftState ) | 當收到WM_SYSKEYDOWN或WM_KEYDOWN消息時觸發。事件映射條目:EVENT_STOCK_KEYDOWN( ) |
KeyPress | void FireKeyPress( short * pnChar ) | 當接收到WM_CHAR消息時觸發。事件映射條目:EVENT_STOCK_KEYPRESS( ) |
KeyUp | void FireKeyUp( short nChar , short nShiftState ) | 當接收到WM_SYSKEYUP或WM_KEYUP消息觸發。事件映射條目:EVENT_STOCK_KEYUP( ) |
MouseDown | void FireMouseDown( short nButton , short nShiftState , float x , float y ) | 接收到任何BUTTONDOWN (左側、 中間或右側)消息。 鼠標將在事件觸發前捕獲此事件。事件映射條目:EVENT_STOCK_MOUSEDOWN( ) |
MouseMove | void FireMouseMove( short nButton , short nShiftState , float x , float y ) | 當收到 WM_MOUSEMOVE 消息時觸發。事件映射條目:EVENT_STOCK_MOUSEMOVE( ) |
MouseUp | void FireMouseUp( short nButton , short nShiftState , float x , float y ) | 收到任何BUTTONUP (左側、 中間或右側)消息時。 鼠標將在觸發前捕獲此事件。事件映射條目:EVENT_STOCK_MOUSEUP( ) |
ReadyStateChange | void FireReadyStateChange( ) | 基於在收到必定數量數據後轉換爲下一個就緒狀態時觸發。事件映射條目:EVENT_STOCK_READYSTATECHANGE( ) |
添加經常使用事件比添加自定義事件須要更少的工做,由於實際事件的觸發由基類COleControl自動處理。 如下過程使用開發的控件添加經常使用事件MFC ActiveX 控件嚮導。 調用 KeyPress 事件時觸發,按下某個鍵並在控件處於活動狀態。 此過程還用於添加其餘經常使用事件。 替換 KeyPress 的所選的經常使用事件名稱。blog
由於經常使用事件處理由控件的基類,添加事件嚮導不會更改以任何方式在類聲明。 它將事件添加到控件的事件映射,並使將項記入它.IDL 文件。 將如下行添加到控件的事件映射,位於控件類實現 (.CPP) 文件:token
EVENT_STOCK_KEYPRESS()
添加此代碼會觸發 KeyPress 事件時接收到 WM_CHAR 消息和控件處於活動狀態。 經過調用其觸發函數,能夠在其餘時間觸發 KeyPress 事件 (例如, FireKeyPress) 從在控件代碼內。
添加事件嚮導將如下代碼行添加到控件的.IDL 文件:事件
[id(DISPID_KEYPRESS)] void KeyPress(SHORT* KeyAscii);
此行將按鍵事件與標準的調度 ID 相關聯,並容許以應對預期的 KeyPress 事件的容器。ip
因爲時間關係,添加自定義事件咱們放在下一篇來講。