ocx
ocx_百度百科
百度百科 網(wǎng)頁新聞貼吧知道網(wǎng)盤圖片視頻地圖文庫資訊采購百科百度首頁登錄注冊進入詞條全站搜索幫助首頁秒懂百科特色百科知識專題加入百科百科團隊權(quán)威合作下載百科APP個人中心收藏查看我的收藏0有用+10ocx播報討論上傳視頻對象類別擴充組件OCX 是對象類別擴充組件(Object Linking and Embedding (OLE) Control Extension);是可執(zhí)行的文件的一種,但不可直接被執(zhí)行; 是 ocx 控件的擴展名,與 .exe、.dll 同屬于PE文件。如果你用過 Visual Basic 或者 Delphi 一類的可視化編程工具,那么對控件這個概念一定不會陌生,就是那些工具條上的小按鈕,如 EditBox,Grid,ImageBox,Timer 等等。每個控件都有自己的事件、方法和屬性。使用了控件的編程非常容易。在程序的設(shè)計階段可以設(shè)置一些屬性,如大小,位置,標題(caption)等等,在程序運行階段,可以更改這些屬性,還可以針對不同的事件,調(diào)用不同的方法來實現(xiàn)對該控件的控制??丶秃孟褚粔K塊的積木,程序要做的事只是將這些積木搭起來。控件的最大好處是可以重復(fù)使用,甚至可以在不同的編程語言之間使用,例如,你可以在 VB 中嵌入用 VC 開發(fā)的控件。外文名Object Linking and Embedding (OLE) Control eXtension別????名Object Linking and Embedding Control eXtension平????臺ocx 控件縮????寫ocx目錄1詳細信息2注冊方式3可能問題詳細信息播報編輯控件的本質(zhì)是微軟公司的對象鏈接和嵌入(OLE)標準。由于它充分利用了面向?qū)ο蟮膬?yōu)點,使得程序效率得到了很大的提高,從而得到了廣泛的應(yīng)用。國外有很多公司就是專門制作各種各樣控件的??丶淖钤缧问绞且?VBX的格式出現(xiàn)的,后來變成了.OCX。由于Internet的廣泛流行,微軟公司推出了ActiveX技術(shù),就是從OLE發(fā)展起來的,加入了WWW上的功能。所以最流行的是ActiveX控件。ActiveX控件.ActiveX控件是可重用的軟件組件。使用它可以很快地在網(wǎng)絡(luò)應(yīng)用程序、桌面應(yīng)用程序、以及開發(fā)工具中加入特殊的功能。ActiveX控件的使用者可以無需知道這些組件是如何開發(fā)的,便可以完成網(wǎng)頁或應(yīng)用程序的設(shè)計。對象鏈接和嵌入用戶控件(OCX)是一種可以由在微軟的Windows系統(tǒng)中運行的應(yīng)用軟件創(chuàng)建使用的特殊用途的程序。OCX提供操作滾動條移動和視窗恢復(fù)尺寸的功能。如果你有Windows系統(tǒng),你會發(fā)現(xiàn)在你的Windows地址錄里有大量OCX文件名后綴的文件。 對象鏈接和嵌入(OLE)被設(shè)計來支持混合文檔(包含多種資料類型,比如文本、繪畫圖像、聲音、動畫)。Windows桌面就是一個混合文檔的范例,微軟使用OLE來建立的。OLE和組件對象模型(COM繼OLE后的更常用的概念)支持“即插即用”程序的發(fā)展,“即插即用”程序在系統(tǒng)中可以用任何語言寫入并可以由任何應(yīng)用程序動態(tài)地使用。這些程序被認為是他們在其上運行的container的組件和應(yīng)用程序。這種基于組件的近似應(yīng)用程序的發(fā)展縮減了程序調(diào)試時間并改善了程序的性能和品質(zhì)。Windows應(yīng)用發(fā)展程序(比如powerbuilder和Microsoft Access)具有OCX的優(yōu)勢。注冊方式播報編輯ocx控件的安裝方式有很多種,這里介紹最簡單的一種。步驟:1.進入開始,點擊運行。2.在出現(xiàn)的框中鍵入regsvr32 C:\xxxx.ocx 。(XXXX為控件名, C:\為目錄)(regsvr32E:\控件的制作\myOcxTest\Debug\myOcxTest.ocx)3.點擊確認后等待出現(xiàn)提醒注冊成功即可。oca 文件Oca文件不是控件,其中保存Ocx控件的屬性ocx的注銷1.進入開始,點擊運行。2.在出現(xiàn)的框中鍵入regsvr32 /u C:\xxxx.ocx 。(XXXX為控件名, C:\為目錄)(regsvr32 /u E:\控件的制作\myOcxTest\Debug\myOcxTest.ocx)3.點擊確認后等待出現(xiàn)提醒注銷成功即可。可能問題播報編輯同一個OCX的多個控件在同一窗體上會出現(xiàn)可能的問題,主要原因是不能有全局變量(或共享數(shù)據(jù)) ,應(yīng)該盡量定義成類的成員變量,全局變量在同一個進程中要被共享的。新手上路成長任務(wù)編輯入門編輯規(guī)則本人編輯我有疑問內(nèi)容質(zhì)疑在線客服官方貼吧意見反饋投訴建議舉報不良信息未通過詞條申訴投訴侵權(quán)信息封禁查詢與解封?2024?Baidu?使用百度前必讀?|?百科協(xié)議?|?隱私政策?|?百度百科合作平臺?|?京ICP證030173號?京公網(wǎng)安備110000020000ocx入門淺析-CSDN博客
>ocx入門淺析-CSDN博客
ocx入門淺析
最新推薦文章于?2023-12-07 15:02:34?發(fā)布
kevin--你不知道的事
最新推薦文章于?2023-12-07 15:02:34?發(fā)布
閱讀量4.1w
收藏
71
點贊數(shù)
12
文章標簽:
ocx
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/wangkui1331/article/details/53763990
版權(quán)
1.exe,ocx,dll的區(qū)別
分析:exe是一個可執(zhí)行程序,而ocx看做是一個窗口上的控件(控件即ocx,如button),dll是將函數(shù)、變量、類封裝在一起的庫
ocx的形式如下:
圖中的各個都是ocx控件(我是這樣認為的),只不過MFC內(nèi)置了一些控件,但是如果是自己寫的ocx控件,程序運行時必須將生成的ocx控件拷到可執(zhí)行目錄下
2.ocx特點(根據(jù)普通的button可知)
(1)ocx是可視化窗口,一個ocx有一個ID,可以通過ID來建立一個對應(yīng)的類,調(diào)用其中函數(shù)(如果看不到,那么肯定隱藏了)
(2)可以響應(yīng)單擊、雙擊等鼠標事件
(3)含有對應(yīng)的屬性
3.創(chuàng)建一個ocx程序(如何讓ocx含有上面這些屬性呢)
(1)利用VS2010創(chuàng)建一個MFC ActiveX Control工程,名為myocx
其中myocx.h中InitInstance是入口,.cpp中含有ocx注冊、反注冊的函數(shù)
myocxCtrl.h中CmyocxCtrl是ocx的可視化窗口類,父類是COleControl,因為是窗口,所以可以響應(yīng)OnCreate,Onsize等消息,含有消息映射,調(diào)度映射,事件映射
myocxPropPage.h是ocx的屬性,就像按鈕button類含有屬性一樣
myocx.idl是對外接口,據(jù)說CmyocxCtrl類是繼承它的,所有對外接口都在myocx.idl這里聲明,在CmyocxCtrl類中實現(xiàn)
myocx.def,ocx是一種特殊的dll,所以同樣有def文件,內(nèi)容如下
; myocx.def : Declares the module parameters.
EXPORTS
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE其中的PRIVATE的意思是對ocx私有,即這些函數(shù)名不會加到生成的庫文件中(編譯ocx發(fā)現(xiàn)除了生成ocx,還有一個lib文件)
(2)消息映射,調(diào)度映射,事件映射
>1含義
? ? ?消息映射:即響應(yīng)操作系統(tǒng)的消息
? ? ?調(diào)度映射:可以在外部調(diào)用的接口函數(shù),通俗的將就是一個控件可以調(diào)用它內(nèi)部的函數(shù),如CButton btn;btn.函數(shù)名();
? ? ?事件映射:單擊、雙擊等事件由ocx傳給它的容器進行響應(yīng),如按鈕的一些事件,觸發(fā)后可以在它的父窗口中進行響應(yīng)處理
>2添加調(diào)度映射
在myocx的idl中對應(yīng)的調(diào)度映射下添加:
[id(1)] void Hello();
在myocx.h中添加:
afx_msg void Hello();
//添加調(diào)度枚舉類型
enum {
//調(diào)度ID,從1開始
dispidHello = 1L,
//事件ID,從1開始
};
在myocx.cpp中添加:
void CmyocxCtrl::Hello()
{
AfxMessageBox(_T("Hello world"));
}
編譯并生成ocx,默認編譯生成的ocx也注冊好了
創(chuàng)建一個基于對話框的MFC工程,名為useocx,在對話框窗口右擊插入ActiveX 控件,快速輸入生成的ocx的前幾個字母找到ocx,添加進去
右鍵ocx,選擇添加變量,變量名設(shè)為m_myocx,設(shè)置好后,便會生成對應(yīng)的ocx類
可以看到ocx類中已經(jīng)自動含有:
void Hello()
{
InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
這個時候就可以利用m_myocx調(diào)用里面的Hello函數(shù)了
附:也可以在下面這個位置右鍵選擇添加添加函數(shù)實現(xiàn)
>3添加事件映射
在下圖上右鍵
選擇添加事件,選擇Click,確認,效果是在idl文件事件下面多出下面一行:
[id(DISPID_CLICK)] void Click(void);
在myocx.cpp中中間多出:
BEGIN_EVENT_MAP(CmyocxCtrl, COleControl)
EVENT_STOCK_CLICK()
END_EVENT_MAP()
效果是在useocx工程的資源對話框文件中,右鍵添加的Ocx控件,查看屬性,發(fā)現(xiàn)事件中
多出了Click屬性,此時可以添加函數(shù),運行useocx工程時鼠標點擊控件就會觸發(fā)這個函數(shù)
如果添加自定義的事件映射,則在myocxi.idl中事件映射下添加:
[id(1)] void MyDrag(void);
在myocxCtrl.h中添加
enum {
//調(diào)度映射ID
dispidHelloClick = 1L,
//事件映射ID
eventidMyDrag = 1L,
};
protected:
void MyDrag(void)
{
FireEvent(eventidMyDrag, EVENT_PARAM(VTS_NONE));
}
同樣查看useocx工程資源對話框文件控件屬性:
多出MyDrag屬性,此時可以再外面寫響應(yīng)函數(shù),具體觸發(fā)則需要根據(jù)需要在ocx內(nèi)部調(diào)用就可以觸發(fā)
這里注意ocx事件觸發(fā)都是在ocx內(nèi)部觸發(fā),外部進行響應(yīng)處理的,如button類,點擊或雙擊都是在按鈕本身觸發(fā),最后由它的父窗口進行響應(yīng)處理,自定義的事件也是要在內(nèi)部進行觸發(fā)
注意:InvokeHelper和FireEvent這兩個函數(shù)中的表示傳入形參的參數(shù)含有多個時,通過空格進行隔開(一個函數(shù)形參可以有很多個,但返回值只有一個)
總結(jié):
1.ocx有三種映射,但idl中對外提供的只有調(diào)度映射和事件映射
2.(1)ocx的類與ocx是通過idl文件中最后的類的ID建立聯(lián)系的
idl中:
// Class information for CmyocxCtrl
[
uuid(EF2CFD6B-E121-47E3-BD63-5F5DD51DCCFF)
]
在ocx類(class CMyocxctrl_use : public CWnd)中
CLSID const& GetClsid()
{
static CLSID const clsid
= { 0xEF2CFD6B, 0xE121, 0x47E3, { 0xBD, 0x63, 0x5F, 0x5D, 0xD5, 0x1D, 0xCC, 0xFF } };
return clsid;
}
(2)調(diào)度映射是通過Idl中調(diào)度函數(shù)前的ID建立聯(lián)系的
在idl中:
[id(1)] void Hello();
在在ocx類(class CMyocxctrl_use : public CWnd)中
void Hello()
{
InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
(3)事件映射是在內(nèi)部進行觸發(fā),也就是含有fireEvent的那個函數(shù)是在ocx內(nèi)部調(diào)用作為觸發(fā)方式,響應(yīng)在外面實現(xiàn)
3.ocx作為控件在MFC中使用時,此時該控件與它的容器是父窗口與子窗口關(guān)系,普通控件與父窗口之間的函數(shù)調(diào)用方式它也同樣適用
4ocx屬性
與myocxPropPage.h中CmyocxPropPage類有關(guān),對應(yīng)的效果:
5.ocx調(diào)試
(1)在exe中進行調(diào)試
按照上面方法在useocx工程中添加好ocx后,在myocx工程中設(shè)置以下屬性:
就可以調(diào)試了
(2)在IE中調(diào)試
首先編寫一個html文件,后綴名為htm,添加如下內(nèi)容:
HTML>