ActiveX控制項

2021-05-28 10:43:09 字數 2254 閱讀 2465

1.        概念

activex控制項等價於以前的ole控制項或ocx。乙個典型的控制項包括設計時和運 行時的使用者介面,唯一的idispatch介面定義控制項的方法和屬性,唯一的 iconnectionpoint介面用於控制項可引發的事件。

2.  控制項框架

圖 1其中,_dclock和_dclockevents這兩個介面將為客戶程式提供本控制項的屬性、方法以及可能響應的事件。介面是外部程式和控制項進行通訊的協議,把介面看成是函式的集合,外部程式通過介面所暴露出來的方法訪問控制項的屬性和方法。把介面看成抽象基類,在介面中定義的所有函式都是純虛函式,函式的實現是在cclockctrl類中完成。mfc通過底層封裝,讓cclockctrl繼承至_dclock介面,

全域性函式dllregisterserver()和dllunregisterserver()分別用於控制項在登錄檔的註冊和登出,一般不需要對其進行改動。

cclockproppage的基類是colepropertypage,cdialog類的派生類,主要負責對屬性頁中對圖形介面下使用者控制項屬性的顯示。

控制項類cclockctrl類是這幾個類中比較重要的乙個類,大部分實質性工作都在該類完成,其基類為colecontrol,從cwnd繼承,因此能夠為控制項物件提供與mfc視窗物件相同的功能同時也提供了一系列事件觸發函式和乙個分發對映表,使activex控制項能夠同包容器程式有效地進行互動。該類的派生類將可以在滿足特定的條件時向控制項的包容器傳送訊息或是觸發事件,以通知包容器程式在控制項內有一些重要的事件發生。分發對映表是其中很重要的乙個部分,負責向包容器程式暴露控制項提供的方法和屬性。排程對映是mfc提供的一種對映機制,主要是為了讓外部應用程式可以方便地訪問控制項的屬性和方法,而事件對映也是mfc提供的一種對映機制,讓控制項可以向包含它的容器傳送事件通知。圖2展示了colecontrol類在控制項與包容器通訊中所起的作用。可以看出,activex控制項與其包容器之間的所有通訊過程都是由colecontrol來完成的:

圖2colecontrol在activex控制項與包容器通訊中的作用

圖23.  屬性頁

新增顏色屬性頁:

begin_proppageids(cclockctrl, 2)

proppageid(cclockproppage::guid)

proppageid(clsid_ccolorproppage)

end_proppageids(cclockctrl)

圖 34.  屬性

l  屬性種類

stock:為每個控制項提供的標準屬性,如字型或顏色。

ambient:圍繞控制項的環境屬性——已被置入容器的屬性。這些屬性不能被更改,但控制項可以使用它們調整自己的屬性。

extended:這些是由容器處理的屬性,一般包括大小和在螢幕上的位置。

custom:由控制項開發者新增的屬性。

l  自定義屬性

圖 4member variable:新增了乙個變數和乙個變數改變時的響應函式。

get/set methods:新增乙個設定變數函式和乙個獲取變數函式。

l  新增關聯屬性變數

圖5l  永續性

// cclockctrl::dopropexchange - persistencesupport

void cclockctrl::dopropexchange(cpropexchange*ppx)

exchangeversion(ppx,makelong(_wverminor, _wvermajor));

colecontrol::dopropexchange(ppx);

//todo: call px_ functions for each persistent custom property.

px_short(ppx,"interval",m_interval,1000);

新增px_函式為變數新增永續性。

l  通知容器,

boundpropertychanged函式通知容器我的屬性屬性改變

l  設計時和使用時狀態設定

利用環境屬性ambientusermode判斷

5.  事件

l  源介面

[default,source] dispinte***ce _dclockevents;

控制項將用這個介面來傳送通知事件,這個介面不是控制項本身實現的介面。一方呼叫介面的方法,另一方實現介面的方法。呼叫_dclockevent的方法向容器傳送事件通知,控制項使用這個介面的方法,由容器去實現介面方法。

l  自定義事件

對於庫存事件的發出,發起庫存事件的通知和過程被底層遮蔽了。對以自定義的事件,必須某乙個條件到達時,顯示的呼叫這個函式。

vb的activeX控制項

vb6做了乙個簡單的activex控制項,還算是簡單,在專案選擇上選activex控制項,就會出現乙個沒有邊框的form,隨便放上乙個label,設定是center 中間對齊 選擇背景黑色,前景紅色,字型24,和vc比起來,vb可以設定字型大小,背景和前景顏色,vc可以設定y方向上的center。v...

C 呼叫ActiveX控制項

背景 最近專案中需要用到activex控制項,專案是在.net平台下開發的。因此就直接在專案中新增了對activex控制項的引用,新增引用成功。在 中例項化類的例項也沒有問題,但在呼叫其方法或屬性時總是丟擲 未處理 comexception 異常。方法一 1 在系統中註冊該ocx控制項,命令 reg...

C 整合ActiveX控制項

問題描述 最近專案中需要用到activex控制項,專案是在.net平台下開發的。因此就直接在專案中新增了對activex控制項的引用,新增引用成功。在 中例項化類的例項也沒有問題,但在呼叫其方法或屬性時總是丟擲 未處理 comexception 異常。解決方法,按照以下步驟 1.註冊activex控...