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


事件


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

事件也稱為消息。

ActiveX 控件使用事件來通知發生到控件的容器。 事件的常見示例包括單擊在控件上,輸入在控件的狀態中使用鍵盤和更改的數據。 這些操作發生時,該控件觸發事件以提醒容器。
事件也稱為消息。
MFC 支持兩種類型的事件: 常用和自定義。 常用事件是事件的類COleControl會自動處理。 常用事件的完整列表,請參閱文章MFC ActiveX 控件:添加常用事件。 自定義事件使控件能夠在特定於該控件的操作發生時通知該容器。 一些示例是一個控件的內部狀態或在某些窗口消息接收更改。
為您正確地引發事件的控制,你的控件類必須映射到相關的事件發生時,應調用的成員函數的控件的每個事件。 此映射機制 (稱為事件映射) 集中了有關事件的信息,並允許 Visual Studio 輕松訪問和操作該控件的事件。 下面的宏,位於標頭中聲明此事件映射 (.H) 文件的控件類聲明:

DECLARE_EVENT_MAP()

聲明事件映射后,它必須在定義控件的實現 (.CPP) 文件。 以下代碼行定義事件映射,從而允許您控制觸發特定事件:

BEGIN_EVENT_MAP(CCreateOcxDemoCtrl, COleControl)
END_EVENT_MAP()

如果您使用 MFC ActiveX 控件向導創建項目,它會自動添加這些行。 如果不使用 MFC ActiveX 控件向導,則必須手動添加這些行。
類視圖,則你可以添加類支持的常用事件COleControl或你定義的自定義事件。 對於每個新的事件,類視圖會自動將相應的條目添加到控件的事件映射和控件的。IDL 文件。
下面討論了事件的詳細信息:

MFC ActiveX 控件:添加常用事件

常用事件不同於自定義事件,它們會自動觸發由類COleControl。 COleControl 包含引發事件導致的常見操作的預定義的成員函數。 由實現的一些常見操作COleControl包括單-和當時的 clicks 控件、 鍵盤事件和更改鼠標按鈕的狀態。 條件映射常用事件始終使用 EVENT_STOCK 前綴開頭。

常用事件支持通過向導添加

COleControl類提供了下表中列出的十個常用事件。你可以通過事件添加向導在你的控件中添加你想使用的事件。
常用事件

事件名稱 觸發函數 注釋
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 的所選的常用事件名稱。

使用添加事件向導添加KeyPress常用事件

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

在添加事件向導中更改常用事件

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

EVENT_STOCK_KEYPRESS()

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

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

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

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

由於時間關系,添加自定義事件我們放在下一篇來說。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM