vs2017開發ActiveX(主講OCX)(五)、事件

事件


ActiveX控件使用事件來通知容器控件發生了什麼。事件的常見示例包括控件的點擊,使用鍵盤輸入的數據以及控件狀態的更改。發生這些操做時,控件將觸發事件以警告容器。

事件也稱爲消息。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

MFC ActiveX 控件:添加經常使用事件

經常使用事件不一樣於自定義事件,它們會自動觸發由類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

使用添加事件嚮導添加KeyPress經常使用事件

  • 加載控件的項目。
  • 在類視圖中,右鍵單擊你的 ActiveX 控件類以打開快捷菜單。
  • 從快捷菜單中,單擊添加,而後單擊添加事件。
  • 這將打開添加事件嚮導。
    添加事件
  • 在事件名稱下拉列表中,選擇KeyPress。
    選擇KeyPress
  • 單擊 「完成」。

在添加事件嚮導中更改經常使用事件

由於經常使用事件處理由控件的基類,添加事件嚮導不會更改以任何方式在類聲明。 它將事件添加到控件的事件映射,並使將項記入它.IDL 文件。 將如下行添加到控件的事件映射,位於控件類實現 (.CPP) 文件:token

EVENT_STOCK_KEYPRESS()

cpp
添加此代碼會觸發 KeyPress 事件時接收到 WM_CHAR 消息和控件處於活動狀態。 經過調用其觸發函數,能夠在其餘時間觸發 KeyPress 事件 (例如, FireKeyPress) 從在控件代碼內。
添加事件嚮導將如下代碼行添加到控件的.IDL 文件:事件

[id(DISPID_KEYPRESS)] void KeyPress(SHORT* KeyAscii);

idl
此行將按鍵事件與標準的調度 ID 相關聯,並容許以應對預期的 KeyPress 事件的容器。ip

MFC ActiveX 控件:添加自定義事件

因爲時間關係,添加自定義事件咱們放在下一篇來講。

相關文章
相關標籤/搜索