版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第6章 ActiveX與OLE部件庫(kù)的基本概念A(yù)ctiveX的概念A(yù)ctiveX控件的使用OLE的基本概念OLEOLE服務(wù)器1部件庫(kù)的內(nèi)容VC+提供部件:彌補(bǔ)AppWizard中沒(méi)有或不便提供的功能例如,對(duì)話框條、狀態(tài)條、屬性頁(yè)、密碼ActiveX控件:現(xiàn)成的ActiveX控件用戶自定義部件:以類為單位保存的部件,供其它的程序重用2對(duì)話框條的使用DialogBar將對(duì)話框作成工具條形式Project-Add To Project-Visual C+ Component,從列表中選擇DialogBar從Resource View中修改DialogBar3狀態(tài)條的使用Status bar是窗口底端
2、的說(shuō)明部分,如果要顯示日期和時(shí)間,可使用部件庫(kù)中的狀態(tài)條Project-Add To Project-Visual C+ Component,從列表中選擇Status bar,并選定日期和時(shí)間從Resource View中修改Status bar4屬性頁(yè)與Wizard(1)屬性頁(yè)是幾個(gè)對(duì)話框的集合,用戶可以顯示任意對(duì)話框,并進(jìn)行相應(yīng)的操作Wizard是幾個(gè)對(duì)話框的集合,但不是同時(shí)顯示這些對(duì)話框,而是按順序逐個(gè)顯示5屬性頁(yè)與Wizard(2)Project-Add To Project-Visual C+ Component,從列表中選擇Property Sheet建立菜單項(xiàng)ID_PAGE_PR
3、OPERTY在菜單ID_PAGE_PROPERTY上添加函數(shù)CMyPropertySheet Sheet;Sheet.DoModal();6屬性頁(yè)與Wizard(3)Project-Add To Project-Visual C+ Component,從列表中選擇Property Sheet建立菜單項(xiàng)ID_PAGE_WIZARD在菜單ID_PAGE_WIZARD上添加函數(shù)7屬性頁(yè)與Wizard(4)8ActiveX的概念(1)ActiveX:對(duì)象鏈接與嵌入(OLE)的擴(kuò)展ActiveX文檔ActiveX文檔是OLE文檔擴(kuò)展,包括4種COM接口:IOleDocument、IOleDocument
4、View、IOleCommandTarget與IPrintActiveX文檔可以包含多個(gè)頁(yè)ActiveX文檔顯示在瀏覽器(例如IE)或其它容器(Binder)9ActiveX的概念(2)ActiveX控件ActiveX控件是OLE控件的擴(kuò)展,不僅可以嵌入網(wǎng)頁(yè),還可用于非網(wǎng)絡(luò)應(yīng)用程序DCOMDCOM是COM在網(wǎng)絡(luò)中的擴(kuò)展,以在網(wǎng)絡(luò)中使用與交換對(duì)象Internet MonikersInternet Monikers是一種資源對(duì)象,例如URL Monikers與異步Monikers10ActiveX的概念(3)ActiveX超鏈接在HTML文件中激活非HTML文件,例如Word、Excel與Powe
5、rPoint等ActiveX服務(wù)器擴(kuò)展實(shí)際上是ISAPI,增強(qiáng)服務(wù)器功能。ISAPI只能通過(guò)CGI實(shí)現(xiàn),它可以通過(guò)DLL實(shí)現(xiàn)ActiveX腳本將OLE自動(dòng)化引入Internet,可使用的腳本包括:VBScript與JavaScript11ActiveX控件(1)ActiveX控件是程序封裝的、可重用的控件ActiveX容器使用接口與ActiveX控件交流ActiveX控件使用標(biāo)準(zhǔn)接口,不局限于某種特定的程序語(yǔ)言,很多開發(fā)工具都可以使用12ActiveX控件(2)ActiveX控件與它的容器通信,控件容器使用ActiveX接口13ActiveX控件(3)ActiveX事件(event):控件發(fā)送
6、給包含控件的應(yīng)用程序的消息ActiveX屬性(property):與控件相關(guān)的一些屬性,例如顏色或按鈕高度ActiveX方法(method):由控件提供的、控件容器調(diào)用的函數(shù)14添加ActiveX控件(1)Project-Add to Project-Components and Controls-Registered ActiveX Controls用戶可像使用其它控件一樣,開始使用新添加的ActiveX控件15添加ActiveX控件(2)16ActiveX控件的建立過(guò)程建立ActiveX控件增加控件屬性與屬性頁(yè)增加控件事件增加控件方法注冊(cè)ActiveX控件使用ActiveX控件17Acti
7、veX控件的建立(1)建立ActiveX控件工程ActiveX控件是以.OCX為后綴用戶創(chuàng)建控件與系統(tǒng)提供控件一樣通過(guò)AppWizard工具,用戶可以建立項(xiàng)目文件,自動(dòng)生成ActiveX控件代碼框架,在此基礎(chǔ)上實(shí)現(xiàn)ActiveX控件18ActiveX控件的建立(2)19ActiveX控件的建立(3)_DClock與_DClockEvents是控件的接口CClockApp是COleControlModule的派生類20ActiveX控件的建立(4)CClockCtrl是COleControl派生類CClockPropPage是COlePropertyPage派生類21ActiveX控件的測(cè)試(1
8、)ActiveX Control Test ContainerWeb Browser22ActiveX控件的測(cè)試(2)在容器中添加ActiveX控件23ActiveX控件的測(cè)試(3)在CClockCtrl:OnDraw()中在CClockCtrl:OnCreate()中SetTimer(1,1000,NULL);在CClockCtrl:OnTimer()中Invalidate();CTime time=CTime:GetCurrentTime();CString str=time.Format(%H:%M:%S);pDC-TextOut(0,0,str);24ActiveX控件的測(cè)試(4)25
9、ActiveX控件屬性(1)在ClassWizard中選擇Automation26ActiveX控件屬性(2)增加BackColor和ForeColor標(biāo)準(zhǔn)屬性在CClockCtrl:OnDraw()中CBrush bkBrush(TranslateColor (GetBackColor();pdc-FillRect(rcBounds,&bkBrush);pdc-SetBkMode(TRANSPARENT);pdc-SetTextColor(TranslateColor (GetForeColor();27ActiveX控件屬性(3)AppWizard生成ActiveX程序時(shí),自動(dòng)生成屬性頁(yè)(
10、General與Extended)通過(guò)增加屬性頁(yè)ID增加頁(yè)面,系統(tǒng)提供一些標(biāo)準(zhǔn)頁(yè)面,例如調(diào)色板(CLSID_CColorPropPage)BEGIN_PROPPAGEIDS(CClockCtrl,1) PROPPAGEID(CClockPropPage:guid)END_PROPPAGEIDS(CClockCtrl)28ActiveX控件屬性(4)增加標(biāo)準(zhǔn)屬性頁(yè)BEGIN_PROPPAGEIDS(CClockCtrl,2) PROPPAGEID(CClockPropPage:guid) PROPPAGEID(CLSID_CColorPropPage)END_PROPPAGEIDS(CClock
11、Ctrl)29ActiveX控件屬性(5)增加定制屬性在ClassWizard中選擇Automation選擇Add Property按鈕選擇Member Variable填寫屬性的名稱、類型、變量和通知函數(shù)30ActiveX控件屬性(6)增加Interval定制屬性,每隔m_Interval更新在CClockCtrl:OnCreate()中 SetTimer(1,m_interval,NULL);在CClockCtrl:OnIntervalChanged()中if(m_intervalUpdateAllViews(NULL);m_rect=rectPos;GetDocument()-SetMo
12、difiedFlag();if(ar.IsStoring() arm_rect;54OLE容器(6)命中測(cè)試函數(shù)CMy222CntrItem* CMy222View:HitTestItems(CPoint point) CMy222Doc* pDoc=GetDocument(); CMy222CntrItem* pHitItem=NULL; CMy222CntrItem* pItem; POSITION pos=pDoc-GetStartPosition(); while(pos!=NULL) pItem=(CMy222CntrItem *)pDoc-GetNextItem(pos); if(
13、pItem-m_rect.PtInRect(point) pHitItem=pItem; return pHitItem;55OLE容器(7)選擇函數(shù)void CMy222View:SetSelection(CMy222CntrItem* pItem) if(pItem=NULL|m_pSelection!=pItem) COleClientItem* pActiveItem=GetDocument()- GetInPlaceActiveItem(this); if(pActiveItem!=NULL&pActiveItem!=pItem) pActiveItem-Close(); Inval
14、idate(); m_pSelection=pItem;56OLE容器(8)鼠標(biāo)單擊選中OLE項(xiàng)-OnLButtonDown()CMy222CntrItem* pHitItem=HitTestItems(point);SetSelection(pHitItem);if(pHitItem!=NULL) CRectTracker tracker; SetTracker(pHitItem,&tracker); UpdateWindow(); if(tracker.Track(this,point) Invalidate(); pHitItem-m_rect=tracker.m_rect; GetDo
15、cument()-SetModifiedFlag(); 57OLE容器(9)設(shè)置跟蹤函數(shù)void CMy222View:SetTracker(CMy222CntrItem *pItem, CRectTracker *pTracker) pTracker-m_rect=pItem-m_rect; if(pItem=m_pSelection) pTracker-m_nStyle|=CRectTracker:resizeInside; if(pItem-GetType()=OT_LINK) pTracker-m_nStyle|=CRectTracker:dottedLine; else pTrack
16、er-m_nStyle|=CRectTracker:solidLine; if(pItem-GetItemState()=COleClientItem: openState|pItem-GetItemState()=COleClientItem: activeUIState) pTracker-m_nStyle|=CRectTracker:hatchInside; 58OLE容器(10)鼠標(biāo)雙擊打開OLE項(xiàng)-OnLButtonDblClk()改變鼠標(biāo)形狀-OnSetCursor()if(m_pSelection!=NULL) m_pSelection-DoVerb(GetKeyState(VK
17、_CONTROL) GetStartPosition();CMy222CntrItem * pItem;while (pos!=NULL) pItem=(CMy222CntrItem *)pDoc-GetNextItem(pos); pItem-Draw(pDC,pItem-m_rect); CRectTracker tracker; SetTracker(pItem,&tracker); tracker.Draw(pDC);60OLE容器(12)添加刪除功能-ID_EDIT_DELvoid CMy222View:OnEditDel() if(m_pSelection!=NULL) m_pSe
18、lection-Delete(); m_pSelection=NULL; GetDocument()-UpdateAllViews(NULL); void CMy222View:OnUpdateEditDel(CCmdUI* pCmdUI) pCmdUI-Enable(m_pSelection!=NULL);61OLE容器(13)OLE容器的例子62OLE服務(wù)器(1)小型服務(wù)器(mini-server):不能獨(dú)立運(yùn)行,只能通過(guò)容器啟動(dòng)全服務(wù)器(full-server):既可以作為獨(dú)立的程序運(yùn)行,又可以由容器啟動(dòng),可以同時(shí)支持多個(gè)容器自動(dòng)化服務(wù)器(automation-server):使程序可以
19、操縱另一個(gè)程序創(chuàng)建的對(duì)象63OLE服務(wù)器(2)全服務(wù)器的例子CFullApp類:生成用于注冊(cè)的OLE標(biāo)識(shí)符,初始化OLE庫(kù)與打開模板,檢查是否作為服務(wù)啟動(dòng)CFullDoc類:當(dāng)容器啟動(dòng)服務(wù)器、創(chuàng)建鏈接項(xiàng)時(shí),構(gòu)造復(fù)合文檔并返回CFullSrvItemCInPlaceFrame類:服務(wù)器的邊框窗口CFullView類:服務(wù)器的視圖CFullSrvItem類:服務(wù)器的OLE接口64OLE服務(wù)器(3)65自動(dòng)化服務(wù)器(1)通過(guò)AppWizard生成程序,第3步選中None與AutomationAfxOleInit初始化OLE庫(kù)COleTemplateServer:ConnectTemplate關(guān)聯(lián)模板
20、與COleTemplateServerCOleTemplateServer:RegisterAll對(duì)象描述文件AutoServer.odl,包含自動(dòng)化對(duì)象、屬性與方法66自動(dòng)化服務(wù)器(2)在CAutoServerDoc中增加變量在CAutoServerDoc構(gòu)造函數(shù)中在CAutoServerDoc:Serialize()中if(ar.IsStoring() arm_pointm_pointm_string; CString m_string; CPoint m_point;m_point=CPoint(50,50);m_string=_T(自動(dòng)化);67自動(dòng)化服務(wù)器(3)在CAutoServe
21、rView:OnDraw()中在CAutoServerDoc中添加Refresh()中pDC-TextOut(pDoc-m_point.x,pDoc- m_point.y,pDoc-m_string);UpdateAllViews(NULL);SetModifiedFlag();68自動(dòng)化服務(wù)器(4)添加自動(dòng)化屬性:直接與間接方式使用Get/Set方法間接添加m_pointGetX():return (short)m_point.x;SetX():m_point.x=nNewValue; Refresh();直接添加m_stringExternal Name:textOnTextChanged
22、():Refresh();手工去除重復(fù)m_string69自動(dòng)化服務(wù)器(5)添加自動(dòng)化方法RefreshWindow:與Refresh相同,根據(jù)m_point與m_string的值更新視圖SetProps:設(shè)置m_point與m_string,并更新視圖ShowWindow:顯示自動(dòng)化服務(wù)器邊框窗口,自動(dòng)化服務(wù)器被自動(dòng)化客戶激活,默認(rèn)不顯示邊框窗口70自動(dòng)化服務(wù)器(6)SetProps方法void CAutoServerDoc:SetProps(short x, short y, LPCTSTR text) m_point.x=x; m_point.y=y; m_string=text; Re
23、fresh();71自動(dòng)化服務(wù)器(7)ShowWindows方法void CAutoServerDoc:ShowWindows() POSITION pos=GetFirstViewPosition(); CView* pView=GetNextView(pos); if(pView!=NULL) CFrameWnd* pWnd=pView-GetParentFrame(); pWnd-ActivateFrame(SW_SHOW); pWnd=pWnd-GetParentFrame(); if(pWnd!=NULL) pWnd-ActivateFrame(SW_SHOW); 72自動(dòng)化服務(wù)器(8)自動(dòng)化服務(wù)器的例子73自動(dòng)化客戶(1)創(chuàng)建自動(dòng)化客戶的過(guò)程創(chuàng)建一個(gè)自動(dòng)化客戶(Automation)創(chuàng)建COleDispatchDriver派生類添加自動(dòng)化對(duì)象變量(IAutoServer m_autoServer)修改對(duì)話框模板為對(duì)話框中的控件定義
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年物流配送與快遞分揀中心建設(shè)合同范本3篇
- 電梯安裝工程2025年度竣工驗(yàn)收合同3篇
- 2025年上半年遵義市余慶縣編外學(xué)前(幼兒)教育教師招考易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年遼寧阜新市太平區(qū)住房和城鄉(xiāng)建設(shè)服務(wù)中心招聘合同制人員重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解-1
- 2025年上半年遼寧省測(cè)繪地理信息局直屬事業(yè)單位招聘13人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年贛州市安遠(yuǎn)縣違法用地和違章建筑整治協(xié)管員招考易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴陽(yáng)南明資本運(yùn)營(yíng)管理限公司社會(huì)化公開招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴州黔南甕安縣統(tǒng)一招聘事業(yè)單位工作人員200人重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解-1
- 2025年上半年貴州金麗茶業(yè)限公司面向社會(huì)公開招聘19人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴州省文化旅游科技限公司公開招聘工作人員補(bǔ)招錄7人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 干部基本信息審核認(rèn)定表
- 2023年11月外交學(xué)院(中國(guó)外交培訓(xùn)學(xué)院)2024年度公開招聘24名工作人員筆試歷年高頻考點(diǎn)-難、易錯(cuò)點(diǎn)薈萃附答案帶詳解
- 春節(jié)行車安全常識(shí)普及
- 電機(jī)維護(hù)保養(yǎng)專題培訓(xùn)課件
- 汽車租賃行業(yè)利潤(rùn)分析
- 春節(jié)拜年的由來(lái)習(xí)俗來(lái)歷故事
- 2021火災(zāi)高危單位消防安全評(píng)估導(dǎo)則
- 佛山市服務(wù)業(yè)發(fā)展五年規(guī)劃(2021-2025年)
- 房屋拆除工程監(jiān)理規(guī)劃
- 醫(yī)院保安服務(wù)方案(技術(shù)方案)
- 高效能人士的七個(gè)習(xí)慣:實(shí)踐應(yīng)用課程:高級(jí)版
評(píng)論
0/150
提交評(píng)論