畢業(yè)設(shè)計(jì)(論文)-WORD文檔分類管理模塊的編寫.doc
《畢業(yè)設(shè)計(jì)(論文)-WORD文檔分類管理模塊的編寫.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《畢業(yè)設(shè)計(jì)(論文)-WORD文檔分類管理模塊的編寫.doc(31頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、WORD 文檔分類管理模塊的編寫文檔分類管理模塊的編寫 摘摘 要要 隨著計(jì)算機(jī)普及和計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展,并且由于電子文檔具備方便性、 快捷性和易操作性,人們將大部分信息以電子文檔形式儲(chǔ)存和歸檔。面對(duì)與日 驟增的海量數(shù)據(jù)信息,對(duì)它們進(jìn)行有效的整理和管理變得尤其重要。人們?cè)絹?越期望能在統(tǒng)一的文檔操作界面上,對(duì)各類文檔信息進(jìn)行收集收藏、整理歸檔, 方便查詢。 本文詳細(xì)介紹了 Word 文檔分類管理軟件的設(shè)計(jì)和實(shí)現(xiàn)。軟件對(duì)用戶需求做 了充分的考慮,進(jìn)行正確和較完整的設(shè)計(jì),使得能在統(tǒng)一的文檔界面上,方便地 對(duì)磁盤上所有文檔(可包括其它存儲(chǔ)介質(zhì),如:移動(dòng)硬盤等,文檔指 Microsoft Office
2、 里的 Word 文檔,后綴名為.doc)進(jìn)行分類管理。文檔管理功能包括:新建 記錄、打開文檔、編輯記錄、刪除記錄或文檔、添加文檔等。 本軟件以 Word 插件形式實(shí)現(xiàn),在 Word 工具檔里增加自定義工具,并實(shí)現(xiàn) 上述各種功能。系統(tǒng)根據(jù) com 組件編程原理,用 Visual Basic 6.0 實(shí)現(xiàn)了一個(gè) Word 插件,并用 Office 2003 Access 保存文檔分類信息。 關(guān)鍵詞關(guān)鍵詞:COM 組件;Word 插件;文檔分類器 The Design and Implementation of a Word Addin for Document Classification Ma
3、nagement Abstract With the popularity of computer science and the development of computer technology, along with the advantages of electronic documents such as convenience, efficiency and ease to use, most of information is stored and archived in the form of electronic document. Faced with the fact
4、that amount of information increasing ceaselessly, it is more and more urgent to find a way to manage and access information effectively and easily. It is expected that we can collect, archive and refer to any types of documents facilely in a unified document interface. This article introduces the d
5、esign and implementation of a Word document classification management software. This system took the users entire requirement into consideration, and was designed correctly and completely, with which any types of document on the disk (including not only the Word documents but also other types on oth
6、er media) can be classified and managed in a unified document interface. Its document management functions includes: creating, editing and deleting document records and adding or removing files into or from the records. The software is implemented in the form of a Word addin component, which adds a
7、user-defined toolbar into the Word, and implemented the functions mentioned above from with the toolbar. Obeying the principles of COM component programming, it is implemented with Visual Basic 6.0 and saves the document classification information in a database of Office2003 Access. Key words: COM C
8、omponent; Word Addin; Document Classifier 目目 錄錄 論文總頁數(shù):31 頁 1引言1 1.1課題背景1 1.2本課題研究的意義.1 1.3本課題的研究方法.1 2組件、COM、接口、插件.1 2.1組件1 2.1.1使用組件的優(yōu)點(diǎn).2 2.1.2對(duì)組件的需求.2 2.2COM.4 2.3接口6 2.3.1IUnknown 接口7 2.3.2Dispatch.8 2.4插件8 3WORD 對(duì)象模型9 3.1WORD 中的對(duì)象模型(OBJECT MODEL)9 3.2WORD 對(duì)象模型抽象圖.9 4系統(tǒng)分析和設(shè)計(jì).10 4.1功能需求分析.10 4.2數(shù)據(jù)
9、存儲(chǔ)結(jié)構(gòu)分析.11 4.3數(shù)據(jù)庫設(shè)計(jì).11 5系統(tǒng)實(shí)現(xiàn)13 5.1插件接口方法.13 5.2事件響應(yīng)14 5.3系統(tǒng)實(shí)現(xiàn)15 5.3.1添加 Word 插件.16 5.3.2添加 Word 工具欄.17 5.3.3連接數(shù)據(jù)庫.18 5.4功能模塊設(shè)計(jì)和實(shí)現(xiàn).19 5.4.1新建功能.21 5.4.2打開文檔功能.23 5.4.3編輯記錄功能.23 5.4.4添加文檔功能.24 5.4.5刪除文檔和記錄功能25 結(jié) 論28 參考文獻(xiàn)28 第 3 頁 共 31 頁 1 1 引言引言 1.11.1課題背景課題背景 隨著計(jì)算機(jī)普及和計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展,電子文檔具備有方便性、快捷性、 易操作性,人們將
10、大部分信息以電子文檔形式儲(chǔ)存和歸檔。面對(duì)與日俱增的海 量數(shù)據(jù)信息,對(duì)它們進(jìn)行有效整理和管理變得尤其重要。人們?cè)絹碓狡谕茉?統(tǒng)一的文檔操作界面上,對(duì)各類文檔信息進(jìn)行收集收藏、整理歸檔,方便查詢。 1.21.2本課題研究的意義本課題研究的意義 Word 文檔是實(shí)際工作學(xué)習(xí)中最為常用的文檔格式之一,為了增強(qiáng) Word、Excel 等軟件的自動(dòng)化能力,人們開發(fā)了各種提高辦公效率的軟件,它 們大多數(shù)實(shí)用、專業(yè)性強(qiáng)。為了避免用戶做大量重復(fù)性的工作,提高 Office 辦 公效率,達(dá)到提高其實(shí)用功能的目的,可根據(jù)具體工作內(nèi)容要求,編寫出最具 本地化、個(gè)性化、最合適的軟件。 1.31.3本課題的研究方法本課
11、題的研究方法 通過對(duì)人們?nèi)粘?Office 辦公情況及存在問題進(jìn)行透徹分析,并根據(jù)辦公習(xí) 慣,總結(jié)出較可行的解決方案。 2 2 組件、組件、COMCOM、接口、插件、接口、插件 2.12.1組件組件 一個(gè)應(yīng)用程序通常是由單個(gè)的二進(jìn)制文件組成。當(dāng)編譯器生成此應(yīng)用程序 之后,在對(duì)下一版本重新編譯并且發(fā)行新生成的版本之前,應(yīng)用程序一般不會(huì) 發(fā)生任何變化。操作系統(tǒng)、硬件及客戶需求的改變都必須等到整個(gè)應(yīng)用程序被 重新編譯之后才能夠得以認(rèn)可,整個(gè)軟件工程就這樣隨著已發(fā)行軟件而日益老 化。 目前這種狀況已經(jīng)發(fā)生了變化。人們認(rèn)識(shí)到應(yīng)用程序在發(fā)行之后不應(yīng)保持 那種靜止的狀態(tài)。開發(fā)人員應(yīng)找出一種方法,以能夠給已經(jīng)
12、發(fā)行的軟件不斷地 注入新的活力。這種解決方案就是將整個(gè)的應(yīng)用程序分隔成多個(gè)獨(dú)立的部分, 也即組件。此作法的好處是可以隨著技術(shù)的不斷發(fā)展而用新的組件取代已有的 組件。此時(shí)的應(yīng)用程序?qū)⒉辉傧褚郧澳菢邮且粋€(gè)在發(fā)行之前就已命中注定要過 時(shí)的靜態(tài)實(shí)體,而是可以隨著新組件不斷取代舊的組件而趨于完善,并且從已 有的組件可以建立全新的應(yīng)用程序。 傳統(tǒng)的作法是將應(yīng)用程序分割成文件、模塊或類,然后將它們編譯并鏈接 成一個(gè)鐵板一塊狀的應(yīng)用程序。它與組件建立應(yīng)用程序的過程(稱為是組件架 構(gòu))有很大的不同。一個(gè)組件同一個(gè)微型應(yīng)用程序類似,即都是已經(jīng)編譯、鏈 接好并可以使用了,應(yīng)用程序就是由多個(gè)這樣的組件打包而得到的。各
13、定制的 第 4 頁 共 31 頁 組件可以在運(yùn)行時(shí)同其他組件連接起來以構(gòu)成某個(gè)應(yīng)用程序。在需要對(duì)應(yīng)用程 序進(jìn)行改進(jìn)時(shí),只需將構(gòu)成此應(yīng)用程序的組件中的某個(gè)用新的版本替換掉即可。 當(dāng)然將鐵板應(yīng)用程序拆分成組件需要一個(gè)強(qiáng)大的工具。我們所用的工具就 是 COM。COM,即組件對(duì)象模型,是關(guān)于如何建立組件以及如何通過組件建 構(gòu)應(yīng)用程序的一個(gè)規(guī)范。目前 Microsoft 的幾乎所有應(yīng)用程序都使用了 COM。 2.1.12.1.1 使用組件的優(yōu)點(diǎn)使用組件的優(yōu)點(diǎn) 前面已經(jīng)提到過組件架構(gòu)的一個(gè)優(yōu)點(diǎn):應(yīng)用程序可隨時(shí)間的流逝而發(fā)展進(jìn) 化。除此之外,使用組件還有一些可以使對(duì)已有應(yīng)用程序的升級(jí)更加方便和靈 活的優(yōu)點(diǎn),
14、如應(yīng)用程序的定制,組件庫以及分布式組件等。 1.組件架構(gòu)從本質(zhì)上講就是可被定制的,因此用戶可以用更能滿足他們需 要的組件來將某個(gè)組件替換掉。 2.組件架構(gòu)最引人注目的優(yōu)點(diǎn)之一是快速應(yīng)用程序開發(fā)。這一優(yōu)點(diǎn)可以使 開發(fā)人員從某個(gè)組件庫中取出所需的組件,并將其快速地組裝到一塊以構(gòu)造所 需的應(yīng)用程序,如同搭積木塊一樣。這種從標(biāo)準(zhǔn)的部件構(gòu)造應(yīng)用程序的做法, 很長時(shí)間以來一直是軟件工程師們的一個(gè)未曾實(shí)現(xiàn)的夢(mèng)想。但是現(xiàn)在這一夢(mèng)想 隨著 ActiveX 控件(以前被稱作是 OLE 控件)的開發(fā)而正在被變?yōu)楝F(xiàn)實(shí)。 Visual Basic、C、C+以及 Java 程序員都可以利用 ActiveX 控件加速應(yīng)用程
15、序 及 Web 頁面的開發(fā)。 3.隨著網(wǎng)絡(luò)帶寬及其重要性的提高,對(duì)由分布在網(wǎng)絡(luò)上的多個(gè)部分組成應(yīng) 用程序的需求毫無疑問將保持強(qiáng)勁的增長勢(shì)頭。組件架構(gòu)可以使得開發(fā)這類分 布過程得以簡(jiǎn)化。實(shí)際上客戶機(jī)服務(wù)器式的應(yīng)用就是向組件架構(gòu)跨出的第一 步。在那里整個(gè)應(yīng)用程序被分成兩部分:客戶機(jī)部分及服務(wù)器部分。 2.1.22.1.2 對(duì)組件的需求對(duì)組件的需求 使用組件的種種優(yōu)點(diǎn)直接來源于可以動(dòng)態(tài)地將它們插入或卸出應(yīng)用程序。 當(dāng)然為了實(shí)現(xiàn)這種功能,所有的組件必須滿足兩個(gè)條件。第一,組件必須動(dòng)態(tài) 連接。第二,它們必須隱藏(或封裝)其內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。兩個(gè)需求是相互依賴 的。動(dòng)態(tài)鏈接對(duì)于組件而言是一個(gè)至關(guān)重要的需求,而
16、信息隱藏則是動(dòng)態(tài)鏈接 的一個(gè)必要條件。 1.動(dòng)態(tài)鏈接:我們的最終目標(biāo)是使用戶在應(yīng)用程序的運(yùn)行過程中能夠?qū)⒔M 件替換掉。雖然并不是在所有的應(yīng)用程序中都需要給用戶提供這種控件,但我 們卻希望能夠?qū)⒔M件動(dòng)態(tài)地鏈接到一起。 可以設(shè)想一下對(duì)于一個(gè)由組件構(gòu)成的,但不能在運(yùn)行時(shí)進(jìn)行鏈接的應(yīng)用程 第 5 頁 共 31 頁 序,當(dāng)用戶需要改變其中的某個(gè)組件時(shí)會(huì)發(fā)生什么。此時(shí)開發(fā)人員不得不將整 個(gè)程序重新鏈接或編譯一遍,然后重新發(fā)行新的版本。但是這種重新編譯或鏈 接對(duì)于最終用戶幾乎是不可能的事情。即使他們知道如何鏈接,但他們可能沒 有鏈接程序,或者沒有合適的鏈接程序。這種需要每次改變一個(gè)組件時(shí)就將其 鏈接一遍的程
17、序和傳統(tǒng)的鐵板一塊的程序?qū)嶋H上沒有什么差別。 2.信息封裝:為組成一個(gè)應(yīng)用程序,需要將各組件連接起來。當(dāng)需要將某 個(gè)組件用新的組件替換掉時(shí),需要將此組件同系統(tǒng)斷開,然后將新的組件連上 去。顯然新的組件必須按同樣的方式連接到系統(tǒng)中,否則將需要重新編寫、重 新編譯或重新鏈接這些組件。不論組件或應(yīng)用程序是否支持動(dòng)態(tài)鏈接,如果改 變了某個(gè)組件同其他組件的連接方式,那么整個(gè)系統(tǒng)的整體性實(shí)際已被破壞了, 此時(shí)至少需要將整個(gè)系統(tǒng)編譯一遍,甚至可能需要重新編碼。 對(duì)于一個(gè)應(yīng)用程序或組件,如果它使用了其它組件,那么我們稱之為一個(gè) 客戶,客戶通過接口同其他組件進(jìn)行連接。如果某個(gè)組件發(fā)生了變化但其接口 沒有任何變化
18、,那么它的客戶將不需要進(jìn)行任何修改。類似地,若客戶發(fā)生了 變化但沒有改變其接口,那么它連接的組件也不需要任何改變。但是如果客戶 或組件的修改導(dǎo)致了對(duì)接口的修改,那么接口的另一方也應(yīng)發(fā)生相應(yīng)的變化。 因此為充分發(fā)揮動(dòng)態(tài)鏈接的功能,組件及客戶都應(yīng)盡可能不要改變它們的 接口。這意味著它們必須被封裝起來。也就是說,組件及客戶的內(nèi)部實(shí)現(xiàn)細(xì)節(jié) 不能反映到接口中,接口同內(nèi)容實(shí)現(xiàn)細(xì)節(jié)的隔離程序愈高,組件或客戶發(fā)生變 化時(shí)對(duì)接口的影響將越小。在接口沒有發(fā)生任何變化時(shí),對(duì)組件的修改將幾乎 不會(huì)對(duì)應(yīng)用程序的其它部分產(chǎn)生什么影響。 這種將客戶同組件實(shí)現(xiàn)相應(yīng)隔離開來的要求對(duì)于組件加上了一些限制: 1.組件必須將其實(shí)現(xiàn)所
19、用的編程語言封裝起來。任一客戶都應(yīng)能使用任一 組件,不論他們是用什么編程語言實(shí)現(xiàn)的。將實(shí)現(xiàn)的編程語言暴露出來只會(huì)在 組件及客戶間引入新的依賴。 2.組件必須以二進(jìn)制的形式發(fā)布。如果想將實(shí)現(xiàn)組件的編程語言隱藏起來, 那么在發(fā)布時(shí)它們必須是已被編譯、鏈接好并且馬上就可以投入使用的。 3.組件必須可以在不妨礙已有用戶的情況下被升級(jí)。一個(gè)組件的新版本必 須既能夠同老版本的客戶一起使用。也可以同新版本的客戶一起使用。 4.組件在網(wǎng)絡(luò)上的位置必須可以被透明地重新分配。組件及使用它的程序 應(yīng)能夠在同一進(jìn)程中,不同的進(jìn)程或不同的機(jī)器上運(yùn)行??蛻魧?duì)遠(yuǎn)程組件的處 理方式應(yīng)與對(duì)本地組件的處理方式是一樣的。否則,當(dāng)將
20、某個(gè)本地組件移動(dòng)到 網(wǎng)絡(luò)上的另外某個(gè)地方時(shí),客戶程序必須被重新編譯。 將以上幾點(diǎn)加以說明: 第 6 頁 共 31 頁 1.與語言的無關(guān)性。為方便討論起見,假定某個(gè)應(yīng)用程序只能使用由 Objective C 編寫的組件進(jìn)行定制。這樣一來,將不會(huì)有太多的人來為此應(yīng)用程 序編寫組件,因?yàn)榇蠖鄶?shù)編程人員使用的是 C+。以后我們可能會(huì)用 C+來編 寫組件,從而使得應(yīng)用程序可用的組件多起來。但如果后來另外有一種語言, 假設(shè)是 Espresso Beans 變得流行起來,大家都放棄 C+,轉(zhuǎn)而使用這一語言。 為了使用應(yīng)用程序不被淘汰,我們需要用這種新語言來編寫組件。如此就有了 三種截然不同的編寫組件的方法。
21、在一個(gè)與語言無關(guān)的架構(gòu)中,任何人均可以 編寫組件,并且這些組件不會(huì)因?yàn)榫幊陶Z言的發(fā)展而過時(shí)。 2.用戶可能會(huì)擁有使用同一個(gè)組件的兩個(gè)客戶應(yīng)用程序。假定其中的某個(gè) 應(yīng)用程序被指定使用某個(gè)組件的新版本而另一個(gè)應(yīng)用程序被指定來使用其老版 本。顯然人們希望老應(yīng)用程序仍能夠使用新安裝的新版本組件。但這種向后兼 容的能力不應(yīng)對(duì)組件的發(fā)展造成限制。強(qiáng)行改變某個(gè)組件的功能以使之適應(yīng)新 應(yīng)用程序的需要,同時(shí)使其能支持老的應(yīng)用程序仍應(yīng)是可能的。 2.22.2COM 軟件工程發(fā)展到今天,從一開始的結(jié)構(gòu)化編程,到面向?qū)ο缶幊?,再到現(xiàn) 在的 COM 編程,目標(biāo)只有一個(gè),就是希望軟件能像積方塊一樣是累起來的, 是組裝起來
22、的,而不是一點(diǎn)點(diǎn)編出來的。結(jié)構(gòu)化編程是函數(shù)塊的形式,通過把 一個(gè)軟件劃分成許多模塊,每個(gè)模塊完成各自不同的功能,盡量做到高內(nèi)聚低 藕合。件工程的核心就是要模塊化,最理想的情況就是 100%內(nèi)聚 0%藕合。結(jié) 構(gòu)化編程方式只是一個(gè)開始。下一步就出現(xiàn)了面向?qū)ο缶幊蹋鄬?duì)于面向功 能的結(jié)構(gòu)化方式是一個(gè)巨大的進(jìn)步。面向功能的模塊化方法它的著眼點(diǎn)是事物 之間的聯(lián)系,它眼中看不到事物的概念它只注重功能。面向功能的結(jié)構(gòu)化方法 因?yàn)樗⒁獾闹皇鞘挛镏g的聯(lián)系,而聯(lián)系是多變的,事物本身可能不會(huì)發(fā)生 大的變化,而聯(lián)系則是很有可能發(fā)生改變的,聯(lián)系一變,那就是另一個(gè)世界了, 那就是另一種功能了。如果我們用面向?qū)ο蟮?/p>
23、方法,我們就可以以不變應(yīng)萬變, 只要事先把事物用類描述好,我們要改變的只是把這些類聯(lián)系起來的方法,只 是重新使用我們的類庫,而面向過程的方法因?yàn)樗鼧?gòu)造的是一個(gè)不穩(wěn)定的世界, 所以一點(diǎn)小小的變化也可能導(dǎo)致整個(gè)系統(tǒng)都要改變。 然而面向?qū)ο蠓椒ㄈ匀挥袉栴},問題在于重用的方法。搭積木式的軟件構(gòu) 造方法的基礎(chǔ)是有許許多多各種各樣的可重用的部件、模塊。我們首先想到的 是類庫,因?yàn)槲覀冇妹嫦驅(qū)ο蟮姆椒óa(chǎn)生的直接結(jié)果就是許多的類。但類庫的 重用是基于源碼的方式,這是它的重大缺陷。首先它限制了編程語言。其次你 每次都必須重新編譯,只有編譯了才能與你自己的代碼結(jié)合在一起生成可執(zhí)行 文件。另一種重用方式很自然地就想
24、到了是 DLL 的方式。Windows 里到處是 第 7 頁 共 31 頁 DLL,它是 Windows 的基礎(chǔ),但 DLL 也有它自己的缺點(diǎn)??偨Y(jié)一下它至少有 四點(diǎn)不足。(1)函數(shù)重名問題。DLL 里是一個(gè)一個(gè)的函數(shù),我們通過函數(shù)名來調(diào) 用函數(shù),那如果兩個(gè) DLL 里有重名的函數(shù)怎么辦?(2)各編譯器對(duì) C函數(shù) 的名稱修飾不兼容問題。對(duì)于 C函數(shù),編譯器要根據(jù)函數(shù)的參數(shù)信息為它 生成修飾名,DLL 庫里存的就是這個(gè)修飾名,但是不同的編譯器產(chǎn)生修飾的方 法不一樣,所以你在 VC 里編寫的 DLL 在 BC 里就可以用不了。不過也可以用 extern “C“來強(qiáng)調(diào)使用標(biāo)準(zhǔn)的 C 函數(shù)特性,關(guān)閉修
25、飾功能,但這樣也喪失了 C的重載多態(tài)性功能。(3)路徑問題。放在自己的目錄下面,別人的程序就 找不到,放在系統(tǒng)目錄下,就可能有重名的問題。而真正的組件應(yīng)該可以放在 任何地方甚至可以不在本機(jī),用戶根本不需考慮這個(gè)問題。(4)DLL 與 EXE 的 依賴問題。我們一般都是用隱式連接的方式,就是編程的時(shí)侯指明用什么 DLL,這種方式很簡(jiǎn)單,它在編譯時(shí)就把 EXE 與 DLL 綁在一起了。如果 DLL 發(fā)行了一個(gè)新版本,我們很有必要重新鏈接一次,因?yàn)?DLL 里面函數(shù)的地址可 能已經(jīng)發(fā)生了改變。 DLL 的缺點(diǎn)就是 COM 的優(yōu)點(diǎn)。COM 和 DLL 一樣都是基于二進(jìn)制的代碼 重用,所以它不存在類庫重
26、用時(shí)的問題。另一個(gè)關(guān)鍵點(diǎn)是,COM 本身也是 DLL,既使是 ActiveX 控件.ocx 它實(shí)際上也是 DLL,所以說 DLL 現(xiàn)在還是有重 用上有很大的優(yōu)勢(shì),通 COM 本身的機(jī)制改變了重用的方法,以一種新的方法 來利用 DLL,來克服 DLL 本身所固有的缺陷,從而實(shí)現(xiàn)更高一級(jí)的重用方法。 COM 沒有重名問題因?yàn)楦静皇峭ㄟ^函數(shù)名來調(diào)用函數(shù),而是通過虛函數(shù)表, 自然也不會(huì)有函數(shù)名修飾的問題。路徑問題也不復(fù)存在,因?yàn)槭峭ㄟ^查注冊(cè)表 來找組件的,放在什么地方都可以,即使在別的機(jī)器上也可以。也不用考慮和 EXE 的依賴關(guān)系了,它們二者之間是松散地結(jié)合在一起,可以輕松地?fù)Q上組件 的一個(gè)新版本。
27、 簡(jiǎn)單地說,COM 是一種跨應(yīng)用和語言共享二進(jìn)制代碼的方法。與 C+不同, 它提倡源代碼重用。源碼級(jí)重用雖然好,但只能用于 C+。它還帶來了名字沖 突的可能性,更不用說不斷拷貝重用代碼而導(dǎo)致工程膨脹和臃腫。Windows 使 用 DLLs 在二進(jìn)制級(jí)共享代碼。這也是 Windows 程序運(yùn)行的關(guān)鍵重用 kernel32.dll,user32.dll 等。但 DLLs 是針對(duì) C 接口而寫的,它們只能被 C 或理解 C 調(diào)用規(guī)范的語言使用。由編程語言來負(fù)責(zé)實(shí)現(xiàn)共享代碼,而不是由 DLLs 本 身。這樣的話 DLLs 的使用受到限制。MFC 引入了另外一種 MFC 擴(kuò)展 DLLs 二進(jìn)制共享機(jī)制。
28、但它的使用仍受限制只能在 MFC 程序中使用。COM 通 過定義二進(jìn)制標(biāo)準(zhǔn)解決了這些問題,即 COM 明確指出二進(jìn)制模塊(DLLs 和 EXEs)必須被編譯成與指定的結(jié)構(gòu)匹配。這個(gè)標(biāo)準(zhǔn)也確切規(guī)定了在內(nèi)存中如何 第 8 頁 共 31 頁 組織 COM 對(duì)象。COM 定義的二進(jìn)制標(biāo)準(zhǔn)還必須獨(dú)立于任何編程語言。一旦滿 足了這些條件,就可以輕松地從任何編程語言中存取這些模塊。由編譯器負(fù)責(zé) 所產(chǎn)生的二進(jìn)制代碼與標(biāo)準(zhǔn)兼容。這樣使后來的人就能更容易地使用這些二進(jìn) 制代碼。在內(nèi)存中 COM 對(duì)象的這種標(biāo)準(zhǔn)形式在 C+虛函數(shù)中偶爾用到,所以 這就是為什么許多 COM 代碼使用 C+的原因。但是記住,編寫模塊所用
29、的語 言是無關(guān)的,因?yàn)榻Y(jié)果二進(jìn)制代碼為所有語言可用。 此外,COM 不是 Win32 特有的。從理論上講,它可以被移植到 Unix 或其 它操作系統(tǒng),但是好像還從來沒有在 Windows 以外的地方聽說過 COM。 2.32.3接口接口 由于組件向外部隱藏了其內(nèi)部的細(xì)節(jié),因此客戶要使用組件時(shí)就必須通過 一定的機(jī)制,也就是說要通過一定的方法來實(shí)現(xiàn)客戶與組件之間的通信,這就 需要接口。所謂接口就是組件對(duì)外暴露的、向外部客戶提供服務(wù)的“連接點(diǎn)” 。 外部的客戶見不到組件內(nèi)部的細(xì)節(jié),它所能看到的只是接口,客戶也是通過接 口來獲取組件提供的服務(wù)。這有點(diǎn)像 OSI 網(wǎng)絡(luò)協(xié)議分層模型,每一層就像一個(gè) 組件,
30、它內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)對(duì)于其他層是不可見的;而每一層通過“服務(wù)接入點(diǎn)” 向其上層提供服務(wù),這就像這里所說的接口。一般來說,接口總是固定的,也 是公開的。組件的開發(fā)人員要實(shí)現(xiàn)這些接口,而客戶則通過接口獲得服務(wù)。正 是接口的這種固定和公開,才使得組件和客戶能夠在不了解對(duì)方的情況下達(dá)成 一致。 接口提供了兩個(gè)不同對(duì)象間的一種連接。實(shí)際上計(jì)算機(jī)程序是通過一組函 數(shù)而連接起來的。這組函數(shù)實(shí)際上就定義了程序中不同部分的接口。DLL 的接 口就是它所輸出的那些函數(shù)。COM 中的接口也涉及到一組由組件實(shí)現(xiàn)并提供給 客戶使用的函數(shù)。對(duì)于 COM 來說,接口是一個(gè)包含一個(gè)函數(shù)指針數(shù)組的內(nèi)存 結(jié)構(gòu)。第一個(gè)數(shù)組包含的是一個(gè)
31、由組件所實(shí)現(xiàn)的函數(shù)的地址。對(duì)于 COM 而言, 接口就是此內(nèi)存結(jié)構(gòu),其它東西均是一個(gè) COM 并不關(guān)心的實(shí)現(xiàn)細(xì)節(jié)。 接口的作用:在 COM 中接口就是一切。對(duì)于客戶來說,一個(gè)組件就是一 個(gè)接口集??蛻糁荒芡ㄟ^接口才能同 COM 組件打交道。從整體上講,客戶對(duì) 于一個(gè)組件可以說是知之甚少的。在某些情況下,客戶甚至不必知道一個(gè)組件 所提供的所有接口。 可復(fù)用應(yīng)用程序架構(gòu):說組件僅僅只是接口的實(shí)現(xiàn)細(xì)節(jié)當(dāng)然有點(diǎn)言過其實(shí)。 不管怎么說,一個(gè)未被實(shí)現(xiàn)的接口實(shí)際上什么也不能完成。但是組件可從應(yīng)用 程序中刪除并可用另外一個(gè)組合來取代之。只要新的組件支持同組件相同的接 口,那么整個(gè)應(yīng)用程序?qū)⑷匀荒軌蚬ぷ鳌蝹€(gè)的
32、組件并不能對(duì)整個(gè)應(yīng)用程序產(chǎn) 生決定的作用。相反,用以連接組件的接口將對(duì)整個(gè)應(yīng)用程序產(chǎn)生決定性的作 第 9 頁 共 31 頁 用。只要接口保持不變,那么組件可以任意地更換。 接口同木板房中的大梁非常類似。這些大梁決定了整個(gè)房屋的結(jié)構(gòu)。同樣 可以將應(yīng)用程序所用的組件替換掉,這樣應(yīng)用程序的行為將會(huì)發(fā)生變化,但從 結(jié)構(gòu)上講,整個(gè)應(yīng)用程序并沒有發(fā)生任何變化。使用組件來構(gòu)造應(yīng)用程序的最 大的優(yōu)點(diǎn)在于可以復(fù)用應(yīng)用程序的結(jié)構(gòu)。如果接口設(shè)計(jì)得好的話,將可以得到 可復(fù)用極高的結(jié)構(gòu)。當(dāng)然使用接口除了可以設(shè)計(jì)出可復(fù)用的結(jié)構(gòu)外,還有其它 若干優(yōu)點(diǎn)。 COM 接口的其它優(yōu)點(diǎn):接口使得客戶可以用同樣的方式來處理不同的組件。
33、 這種能力就被稱作是多態(tài)。這些優(yōu)點(diǎn)是通過接口將某個(gè)特定的行為封閉起來而 獲得的。 2.3.12.3.1 IUnknownIUnknown 接口接口 COM 中的所有內(nèi)容都起于接口,又最終歸于接口。客戶同組件的交互都是 通過一個(gè)接口完成的。在客戶查詢組件的其它接口時(shí),也是通過接口完成的。 這個(gè)接口就是 IUnknown。IUnknown 接口的定義包含在 Win32 SDK 中的 UNKNWN.H 頭文件中。這個(gè)接口實(shí)際上是所有的組件及客戶都知道的,但它 的名字卻表示出它是一個(gè)“未知的”接口。之所以使用這個(gè)名字主要也是為簡(jiǎn) 單起見。所有的 COM 接口都需要繼承 IUnknown。因此若某個(gè)客戶
34、擁有一個(gè) IUnknown 接口的指針,它并不需要知道它所擁有的接口指針到底是什么類型的, 而只需知道此接口可以用來查詢其它接口就行了。 Interface IUnknown Virtual HRESULT_stdcall QueryInterface(const IID Virtual ULONG_stdcall AddRef()=0; Virtual ULONG_stdcall Release ()=0; ; 從上面可以看出 IUnknown 有三個(gè)方法: AddRef():通知 COM 增加它的引用計(jì)數(shù)。如果進(jìn)行了一次接口指針的拷貝, 就心須調(diào)用一次這個(gè)方法,并且原始的值和拷貝的值兩者都
35、要用到。 Release():通知 COM 對(duì)象減少它的引用計(jì)數(shù)。 QueryInterface():從 COM 對(duì)象請(qǐng)求一個(gè)接口指針。當(dāng) coclass 實(shí)現(xiàn)一個(gè)以 上的接口時(shí),就要用這個(gè)方法。 當(dāng)使用 CoCreateInstance()創(chuàng)建對(duì)象的時(shí)候,你得到一個(gè)返回的接口指針。 如果這個(gè) COM 對(duì)象實(shí)現(xiàn)一個(gè)以上的接口(不包括 IUnknown) ,你就必須用 QueryInterface()方法來獲得任何你需要的附加的接口指針。 第 10 頁 共 31 頁 QueryInterface()的原型如下: HRESULT IUnknown:QueryInterface ( REFIID i
36、id, void* ppv ); 以下是參數(shù)解釋: Iid:所請(qǐng)求的接口的 IID。 ppv:接口指針的地址,QueryInterface()通過這個(gè)參數(shù)在成功時(shí)返回接口。 2.3.22.3.2 DispatchDispatch 自動(dòng)化使得用解釋性語言和宏語言訪問 COM 組件更為容易,同時(shí)用這些 語言編寫組件也將更為容易。自動(dòng)化關(guān)注的是運(yùn)行時(shí)的類型檢查,這一點(diǎn)是以 速度的犧牲和編譯時(shí)的類型檢查為代價(jià)的。 自動(dòng)化不是獨(dú)立于 COM 的,而是建立在 COM 基礎(chǔ)上的。一個(gè)自動(dòng)化服務(wù) 器實(shí)際上就是一個(gè)實(shí)現(xiàn)了 IDispatch 接口的 COM 組件。而一個(gè)自動(dòng)化控制器則 是一個(gè)通過 IDispat
37、ch 接口同自動(dòng)化服務(wù)器進(jìn)行通信的 COM 客戶。自動(dòng)化控制 器不會(huì)直接調(diào)用自動(dòng)化服務(wù)器的那些函數(shù),而是通過 IDispatch 接口中的成員函 數(shù)實(shí)現(xiàn)對(duì)服務(wù)器中函數(shù)的間接調(diào)用。IDispatch 接口同自動(dòng)化的其它所有方法一 樣,是作為 Visual Basic 的一部分開發(fā)出來的,以專門用于將一些應(yīng)用程序如 Microsoft Word 和 Microsoft Excel 自動(dòng)化。Microsoft Office 的開發(fā) VBA 實(shí)際上 就是從 Visual Basic 發(fā)展來的。 通過 COM 接口提供的任何服務(wù)都可以通過 IDispatch 接口來提供。由于 IDispatch 為客戶
38、和組件提供了另外一種通信方式。有了 IDispatch 之后,COM 組件就可以通過一個(gè)標(biāo)準(zhǔn)的接口提供它所支持的服務(wù),而無需提供多個(gè)特定于 服務(wù)的接口。簡(jiǎn)單地講,IDispatch 將接收一個(gè)函數(shù)的名稱并執(zhí)行它。 2.42.4插件插件 插件是一種遵循一定規(guī)范的應(yīng)用程序接口編寫出來的程序。插件是一類特 殊的組件。它的目的不是為一般應(yīng)用程序使用,而是專為特定的應(yīng)用程序使用。 插件的本質(zhì)是在不修改程序主體的情況下對(duì)軟件功能進(jìn)行加強(qiáng),當(dāng)插件的接口 被公開時(shí),任何公司或個(gè)人都可以自己制作插件來解決一些操作上的不便或增 加一些功能。插件還可以支持多人合作開發(fā),不同的功能可以由不同的人來完 成,而且由于不同
39、插件之間互不影響,方便程序的調(diào)試和糾錯(cuò)。插件一般在宿 主應(yīng)用程序上添加控制項(xiàng),如菜單、工具按鍵等。插件響應(yīng)宿主程序中對(duì)這些 項(xiàng)目的操作,并對(duì)宿主程序中的數(shù)據(jù)進(jìn)行特定操作。插件類型從廣義的范圍來 看,插件有以下三種類型: 1類似批命令的簡(jiǎn)單插件。事實(shí)上這種插件的自由度非常低。運(yùn)行這種插 第 11 頁 共 31 頁 件后,會(huì)一步步要求用戶進(jìn)行選擇/輸入,最后根據(jù)用戶的輸入來執(zhí)行一系列事 先定義好的操作。這種插件一般是文本文件。功能比較單一,可擴(kuò)展性極小。 優(yōu)點(diǎn)是插件做起來非常方便,即使是對(duì)程序設(shè)計(jì)了解不多的人也可以制作。 2使用一種特殊的腳本語言來實(shí)現(xiàn)的插件。這種插件比較難寫,需要軟件 開發(fā)者自己
40、制作一個(gè)程序解釋內(nèi)核。比如微軟惹了很多麻煩的宏就是這種類型 的。有一套著名的 Office 輔助工具就是完全用 Office 內(nèi)置的 VBScript 寫成的。 這種方法的優(yōu)點(diǎn)在于無需使用其它工具來制作插件,軟件本身就可以實(shí)現(xiàn),普 遍出現(xiàn)于各種辦公自動(dòng)化軟件中。 3利用已有的程序開發(fā)環(huán)境來制作插件。例如 PhotoShop 等軟件使用的方 法。使用這種方法的軟件在程序主體中建立了多個(gè)自定義的接口,使插件能夠 自由訪問程序中的各種資源。這種插件的優(yōu)勢(shì)在于自由度極大,可以無限發(fā)揮 插件開發(fā)者的創(chuàng)意,這種插件是狹義范圍的插件,也是真正意義上的插件。而 這種插件機(jī)制的編寫相對(duì)復(fù)雜,對(duì)于插件接口之間的協(xié)
41、調(diào)比較困難。 3 3 WordWord 對(duì)象模型對(duì)象模型 3.13.1Word 中的對(duì)象模型(中的對(duì)象模型(Object Model) 什么是對(duì)象模型?簡(jiǎn)單地說,用戶在 Word 中操作和改變的每一個(gè)東西都 是一個(gè)對(duì)象,這些對(duì)象的相互關(guān)系組成了 Word 中的對(duì)象模型。在 Word 中,文 檔、對(duì)話框、文本框、圖形、圖表甚至 Word 本身都是對(duì)象,同時(shí),這些對(duì)象 都有自己的屬性和方法,因此,用戶可通過編程來訪問這些已有對(duì)象,改變它 們的屬性,以完成某些較高級(jí)的功能。在對(duì)象模型中,還有一個(gè)重要的概念是 集合(collections),所謂集合,就是由一組相近對(duì)象的組合,它們隸屬于另一 個(gè)大對(duì)象
42、,例如 sentences、words 和 characters 對(duì)象,就可看成一個(gè)集合,它們 都隸屬于 Range 對(duì)象,集合的重要屬性是我們可以對(duì)之進(jìn)行整體操作,當(dāng)然也 可對(duì)集合中的某個(gè)對(duì)象進(jìn)行操作。 3.23.2Word 對(duì)象模型對(duì)象模型 第 12 頁 共 31 頁 圖 1 對(duì)象模型抽象圖 Application 對(duì)象包含 Document、Selection、Bookmark 和 Range 對(duì)象。 Word 提供了數(shù)百個(gè)可與之交互的對(duì)象。這些對(duì)象包括: Application 對(duì)象 Document 對(duì)象 Selection 對(duì)象 Range 對(duì)象 Bookmark 對(duì)象 Appli
43、cation 對(duì)象表示 Word 應(yīng)用程序,是其他所有對(duì)象的父級(jí)。它的所有 成員通常作為一個(gè)整體應(yīng)用于 Word。可以使用該對(duì)象的屬性和方法來控制 Word 環(huán)境。 Document 對(duì)象 Microsoft.Office.Interop.Word.Document 對(duì)象是 Word 編程的中樞。當(dāng)打開 文檔或創(chuàng)建新文檔時(shí),就創(chuàng)建了新的 Microsoft.Office.Interop.Word.Document 對(duì) 象,該對(duì)象被添加到 Word 的 Documents 集合中。焦點(diǎn)所在的文檔叫做活動(dòng)文 檔,由 Application 對(duì)象的 ActiveDocument 屬性表示。 4 4
44、系統(tǒng)分析和設(shè)計(jì)系統(tǒng)分析和設(shè)計(jì) 4.14.1功能需求分析功能需求分析 Word 是微軟公司的 Office 系列辦公組件之一,是目前世界上最流行的文字 編輯軟件,它無疑是現(xiàn)代辦公中使用最多的字處理軟件?,F(xiàn)在已能把各種形式的 信息資料存儲(chǔ)到 Word 文檔中,如文字、圖片、超連接等。面對(duì)大量文檔信息, 對(duì)它們分類管理顯得尤其重要。 由于日常工作中要處理的文檔越來越多,而如果不對(duì)其分類整理將造成需 要時(shí)查找等麻煩。特別是處理文字文檔較多的工作,如財(cái)務(wù)管理,文秘等工作。 解決以上問題有兩種方法可行:一、利用 Windows 對(duì)磁盤文件、文件夾的分級(jí) 管理功能。如在 D 盤上新建幾個(gè)文件夾,分別代表各類
45、性質(zhì)的文檔。此方法解 決了對(duì)文檔的分類存儲(chǔ)問題,但極不方便。如在使用文檔時(shí),只能找到某個(gè)盤 下的某個(gè)目錄,再進(jìn)行新建文檔、刪除文檔、重命名文檔等操作,當(dāng)文檔多且 所分的等級(jí)較多時(shí)(就是盤符下面的文件夾級(jí)數(shù)多) ,將浪費(fèi)時(shí)間,影響辦公效 率,當(dāng)要求多次重復(fù)此等操作時(shí),更顯其弊端。二、開發(fā) Word 插件。此插件 在打開 Word 軟件時(shí)被加載,以工具檔里工具的形式出現(xiàn)。點(diǎn)擊此工具,就可 對(duì)文檔進(jìn)行各種隨心所欲的操作,但不改變文檔內(nèi)容,也就是說此插件是基于 文檔的存儲(chǔ)路徑的,而不是基于文檔本身。 首先,插件基于文檔的存儲(chǔ)路徑,因此“存取自由”是它的一個(gè)特色。用 第 13 頁 共 31 頁 戶可將文
46、檔存放在磁盤任何地方(建議不放在本地 C 盤或桌面) ,也包括來自 網(wǎng)絡(luò)上的文檔路徑,當(dāng)磁盤空間有限的時(shí)候,可以充分體現(xiàn)這一優(yōu)勢(shì)。 其次,插件允許用戶對(duì)文檔進(jìn)行任何操作。包括新建、打開、編輯、刪除 文檔等等。 此插件還有一個(gè)重要特點(diǎn),就是以工具欄里的工具形式出現(xiàn),在啟動(dòng) Word 軟件時(shí)被加載。因此它很“輕量級(jí)” ,占用系統(tǒng)資源少,使用方便,容易卸載。 4.24.2數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)分析數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)分析 系統(tǒng)的數(shù)據(jù)存儲(chǔ)方式可有兩種理想的選擇:XML 和 Access 關(guān)系數(shù)據(jù)庫。 XML 提供了一套跨平臺(tái)、跨網(wǎng)絡(luò)、跨程序語言的數(shù)據(jù)描述方式,使不同系 統(tǒng)之間的數(shù)據(jù)交換更加高效。但如果從更高的技術(shù)角度出
47、發(fā),就會(huì)發(fā)現(xiàn),對(duì) XML 文檔簡(jiǎn)單的文件管理是遠(yuǎn)遠(yuǎn)不夠的:低效的存儲(chǔ)組織、索引查詢技術(shù),不 提供事務(wù)、安全恢復(fù)機(jī)制,無法保證數(shù)據(jù)的完整性和一致性,沒有并發(fā)控制、 移植工具等。用 XML 可方便實(shí)現(xiàn)無限層分類目錄的保存。 關(guān)系數(shù)據(jù)庫是實(shí)體間聯(lián)系是固定的,有良好的完整性支持,對(duì)具有一對(duì)多的層 次關(guān)系,更為直接的描述現(xiàn)實(shí)世界,有良好的性能,存取效率較高,建立在嚴(yán) 格的數(shù)學(xué)概念的基礎(chǔ)上,概念單一,實(shí)體與實(shí)體間的聯(lián)系都用關(guān)系表示,數(shù)據(jù) 結(jié)構(gòu)簡(jiǎn)單、清晰,存取路徑對(duì)用戶透明,有更高的數(shù)據(jù)獨(dú)立性和更好的安全保 密性。Access 適用于小型商務(wù)活動(dòng),用以存貯和管理商務(wù)活動(dòng)所需要的數(shù)據(jù)。 Access 不僅是一
48、個(gè)數(shù)據(jù)庫,而且它具有強(qiáng)大的數(shù)據(jù)管理功能,它可以方便地利 用各種數(shù)據(jù)源,生成窗體(表單),查詢,報(bào)表和應(yīng)用程序等。使用 Microsoft Access,可以在單一的數(shù)據(jù)庫文件中管理所有的信息。 基于系統(tǒng)需求分析和 Visual Basic 語言對(duì) Access 數(shù)據(jù)庫的強(qiáng)大支持,及 Access 自身具有的便捷、易使用等特點(diǎn),系統(tǒng)選用 Access 數(shù)據(jù)庫存儲(chǔ)相關(guān)記錄。 4.34.3數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫設(shè)計(jì) 由于系統(tǒng)基于文檔存儲(chǔ)路徑,操作修改對(duì)象大部分對(duì)于路徑和相關(guān)記錄, 因此數(shù)據(jù)庫只對(duì)文檔的路徑和相關(guān)記錄進(jìn)行存儲(chǔ),而不是文檔。系統(tǒng)把記錄分 為三層,即三個(gè)部分,共三張表,分別用來存儲(chǔ)目錄、文件夾和
49、文檔路徑。用 表 table1 存儲(chǔ)目錄,表 table2 存儲(chǔ)文件夾,表 table3 存儲(chǔ)文檔記錄。如圖: 第 14 頁 共 31 頁 圖 2 數(shù)據(jù)庫表圖 目錄表 table1:用于存儲(chǔ)記錄的最高級(jí)目錄。包括兩列:sort_id,自動(dòng)編號(hào), 主鍵;sort,文本類型,儲(chǔ)存目錄名稱。 圖 3 目錄表 table1 文件夾表 table2:用于保存記錄的中間層,也就是目錄的下一層。包括三 列:fold_id,自動(dòng)編號(hào),主鍵;ref_table1_id,數(shù)字類型,外鍵,用于關(guān)聯(lián) table1 的 sort_id;fold,文本類型,用于保存文件夾記錄名稱。 圖 4 文件夾表 table2 第 1
50、5 頁 共 31 頁 文檔路徑表 table3:用于保存文檔路徑,文件夾的下一層也就是最底層。 包括四列:file_id,自動(dòng)編號(hào),主鍵;ref_table2_id,數(shù)字類型,外鍵,關(guān)聯(lián)到 table2 的 fold_id;filename,文本類型,用于保存文檔的文件名;filepath,文本 類型,用于保存文檔的存儲(chǔ)相對(duì)路徑。 圖 5 文檔表 table3 表之間的關(guān)系如圖: 圖 6 表關(guān)系圖 5 5 系統(tǒng)實(shí)現(xiàn)系統(tǒng)實(shí)現(xiàn) 5.15.1插件接口方法插件接口方法 當(dāng) VB 運(yùn)行時(shí),在 Add-In 菜單中裝載組件以后,VB 就會(huì)調(diào)用組件中 IDTExtensibility 對(duì)象中的 OnConn
51、ection 方法。在 OnConnection 方法里定義 Application 對(duì)象變量,并調(diào)用 CommandBars.Add 方法,就可在程序運(yùn)行時(shí)加載 工具欄。 在“引用”對(duì)話框中選擇“Microsoft Office 8.0 Object library”復(fù)選框,可以通 過“對(duì)象瀏覽器”訪問并瀏覽各種命令條對(duì)象。 因?yàn)椴藛魏凸ぞ邫趯儆谙嗤膶?duì)象庫,它們都將通過 CommandBarControl 對(duì)象被引用。一個(gè)菜單條命令條可以包括幾個(gè)菜單項(xiàng),每個(gè)菜單項(xiàng)本身也是一 個(gè)命令條,而且它又可以包括若干個(gè)菜單命令,每條命令依然是一個(gè)命令條。 第 16 頁 共 31 頁 利用這種模式可以很
52、容易地在開發(fā)環(huán)境中放置外接程序。 使用 commandBars 集合對(duì)象用外接程序來添加命令欄和控件。在 OnConnection 事件過程定義 Application、commandbars 對(duì)象變量,此過程創(chuàng)建 新的命令條按鈕,并返回對(duì)它的對(duì)象變量,并定義 commandbar 上按鍵的事件。 5.25.2事件響應(yīng)事件響應(yīng) 從結(jié)構(gòu)上來看,一個(gè) VB 插件實(shí)際上是一個(gè) COM 組件,原則上組件可以 使用支持 COM 的開發(fā)工具。組件通過實(shí)現(xiàn) COM 中的 IDTExtensibility 對(duì)象來 建立與 VB 的連接。組件注冊(cè)以后,當(dāng) VB 運(yùn)行中在 Add-In 菜單中裝載組件后, VB
53、就會(huì)調(diào)用組件中 IDTExtensibility 對(duì)象中的相應(yīng)方法(如在裝載組件后會(huì)調(diào) 用 OnConnection 方法) 。這時(shí)整個(gè)插件就成為 VB 的一部分從而可以訪問 VB 開 發(fā)環(huán)境中的各種對(duì)象和資源了。 在 Client 派生一個(gè) IDispEventImpl 類來實(shí)現(xiàn) IDispatch 接口的 Sink。在 OLE 中,連接點(diǎn)是指一種由調(diào)用接口的對(duì)象(稱為“源” )和執(zhí)行接口的對(duì)象(稱為 “匯” )構(gòu)成的機(jī)制。連接點(diǎn)執(zhí)行一個(gè)流出接口,它能夠在其他對(duì)象上開啟動(dòng)作, 比如激發(fā)事件和更改通知。通過揭示一個(gè)連接點(diǎn),源就允許匯建立到此源的連 接。插件接口要響應(yīng) Word 事件,需要實(shí)現(xiàn)
54、IDispEvents 接口。 圖 7 接口示意圖 1、一個(gè) COM 組件,允許有多個(gè)連接點(diǎn)對(duì)象(IConnectionPoint)。也就是說 可以有多個(gè)發(fā)生“事件”的源頭。圖 7 中就有 3 個(gè)連接點(diǎn)。 2、管理這些連接點(diǎn)的接口叫“連接點(diǎn)容器”(IConnectionPointContainer)。 連接點(diǎn)容器接口特別簡(jiǎn)單,因?yàn)橹挥?2 個(gè)函數(shù),一個(gè)是 FindConnectionPoint(), 表示查找你想要的連接點(diǎn);另一個(gè)是 EnumConnectionPoints()。 3、每一個(gè)連接點(diǎn),可以被多個(gè)客戶端的接收器(Sink)連接。 首先通過 VB 可以快速建立一個(gè) IDTExtens
55、ibility 對(duì)象框架,其次 VB 對(duì)于 第 17 頁 共 31 頁 整個(gè)開發(fā)環(huán)境都提供了相應(yīng)的對(duì)象供插件訪問和控制,而使用插件的主要目的 就是通過插件來控制宿主程序,調(diào)試十分的方便,可以直接運(yùn)行看結(jié)果,不需 要編譯注冊(cè)。 IDTExtensibility 庫提供了 5 個(gè)可用來操縱加載項(xiàng)以及宿主應(yīng)用程序的事件: OnConnection、OnDisconnection、OnAddInsUpdate、OnStartupComplete 和 OnBeginShutdown。由于接口是對(duì)象和 Visual Basic 之間的約定,必須確保實(shí)現(xiàn) 接口中的所有方法。這就意味著全部四種 IDTExte
56、nsibility 接口方法必須在類模 塊中提供,每一種至少包含一個(gè)可執(zhí)行語句。它能小到只有一個(gè)說明語句,但 是,它們必須至少包含一個(gè)可執(zhí)行語句,以免編譯程序把它們作為空過程刪除。 1.OnConnection 事件 OnConnection 事件在 COM 加載項(xiàng)加載(連接)時(shí)發(fā)生。 2.OnDisconnection 事件 OnDisconnection 事件在卸載 COM 加載項(xiàng)時(shí)發(fā)生??墒褂?OnDisconnection 事件過程運(yùn)行能夠恢復(fù)由加載項(xiàng)對(duì)應(yīng)用程序所作任何更改的代碼,并執(zhí)行常規(guī) 清除操作。 3.OnStartupComplete 事件 當(dāng)宿主應(yīng)用程序完成啟動(dòng)例程時(shí),就會(huì)發(fā)
57、生 OnStartupComplete 事件,在這 種情況下,COM 加載項(xiàng)在啟動(dòng)時(shí)加載。如果加載項(xiàng)未在應(yīng)用程序加載時(shí)加載, OnStartupComplete 事件就不會(huì)發(fā)生,即使用戶在“COM 加載項(xiàng)”對(duì)話框中加 載加載項(xiàng)也是如此。如果此事件確實(shí)發(fā)生,則它將在 OnConnection 事件之后發(fā) 生。 4.OnBeginShutdown 事件 在應(yīng)用程序關(guān)閉而 COM 加載項(xiàng)仍處于加載狀態(tài)的情況下,如果宿主應(yīng)用 程序開始其關(guān)閉例程時(shí),就會(huì)發(fā)生 OnBeginShutdown 事件。如果應(yīng)用程序關(guān)閉 時(shí)該加載項(xiàng)還沒有加載,OnBeginShutdown 事件就不會(huì)發(fā)生。如果此事件確實(shí) 發(fā)生
58、,它將在 OnDisconnection 事件之前發(fā)生。 5.OnAddInsUpdate 事件 當(dāng)一組已加載的 COM 加載項(xiàng)發(fā)生更改時(shí),就會(huì)發(fā)生 OnAddInsUpdate 事件。 當(dāng)某個(gè)加載項(xiàng)加載或卸載時(shí),就會(huì)在任何其它已加載的加載項(xiàng)中發(fā)生 OnAddInsUpdate 事件。 5.35.3系統(tǒng)實(shí)現(xiàn)系統(tǒng)實(shí)現(xiàn) 基于以上背景,及對(duì)用戶需求的充分考慮和當(dāng)前工作環(huán)境及條件,將功能 總結(jié)如下:新建記錄、打開文檔、編輯記錄、刪除文檔和記錄、添加文檔記錄。 第 18 頁 共 31 頁 1.新建記錄:主要分三層結(jié)構(gòu),目錄、文件夾、文檔??蓪?duì)目錄、文件夾 新建,但對(duì)文檔請(qǐng)使用添加功能。 2.打開文檔:當(dāng)
59、在界面內(nèi)選定某個(gè)文檔后,用 WORD 打開此文檔。 3.編輯記錄:對(duì)記錄(包括目錄和文件夾)重命名。 4.添加文檔:將本地磁盤的文檔放入某個(gè)文件夾之下。 5.刪除文檔和記錄:刪除目錄或文件夾(也就是記錄) ,刪除磁盤(介質(zhì)) 上的 WORD 文檔至回收站,永久刪除磁盤上文檔。 5.3.15.3.1 添添加加 WordWord 插件插件 1、創(chuàng)建“外接程序”工程 圖 8 新建外接程序工程 2、打開“設(shè)計(jì)器”中的 Connect 設(shè)計(jì)器。 圖 9 設(shè)計(jì)器 第 19 頁 共 31 頁 雙擊該 Connect 的圖標(biāo)。修改其中的工程名和應(yīng)用程序。其中,“應(yīng)用程 序”選擇該插件是針對(duì)哪個(gè)具體的應(yīng)用程序的
60、。這里選 Microsoft Word。注意: 這里列出的應(yīng)用程序都要求插件提供同一種接口:IDTExtensibility2。 3、添加對(duì) Word 類型庫的引用 系統(tǒng)缺省添加了對(duì) Office 類型庫的引用。由于開發(fā)的是 Word 插件,因此 需要存取 Word 中的對(duì)象。所以必須添加對(duì) Word 的引用。工程-引用,選定 Microsoft Word 11 Object Library。 4、打開該設(shè)計(jì)器的代碼窗口。 設(shè)計(jì)器的代碼就是插件接口方法的實(shí)現(xiàn)。同 VC 中一樣,IDTExtensibility2 有 5 個(gè)方法需要實(shí)現(xiàn)。但 VB 中不需要添加特殊代碼的方法,沒有必要定義其 過程
61、。系統(tǒng)編譯時(shí)自動(dòng)添加。 5、調(diào)試 設(shè)置該工程的屬性,將“調(diào)試”中的啟動(dòng)程序設(shè)置為本地的系統(tǒng)中安裝 Office WinWord.exe 的絕對(duì)路徑:例如 C:Programe FilesMicrosoft OfficeOFFICE11WINWORD.EXE。VB 中調(diào)試時(shí)結(jié)束后,自動(dòng)刪除插件的注冊(cè) 項(xiàng)。因而獨(dú)立打開 Word 時(shí),并沒有出現(xiàn)插件的工具欄。 5.3.25.3.2 添加添加 WordWord 工具欄工具欄 (1)刪除系統(tǒng)缺省添加的代碼。 系統(tǒng)缺省添加的代碼是針對(duì) VB 插件的,而不是 Word 或其它應(yīng)用程序插 件的。因此刪除它們。并在程序頂部添加以下代碼: Option Expl
62、icit Private mAppWord As Word.Application 定義 word 對(duì)象變量 Private mBar As Office.CommandBar 定義工具欄對(duì)象變量 定義工具欄上按鈕對(duì)象變量和事件響響應(yīng)程序 Private WithEvents mBtn1 As Office.CommandBarButton (2)添加 AddinInstance 對(duì)象的 OnConnection 方法。 AddinInstance 就代表了該插件本身。 在其中添加代碼,以便在 Word 中添加工具欄和按鍵,代碼: Private Sub AddinInstance_OnCon
63、nection (ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom () As Variant) Set mAppWord = Application Set mBar = mAppWord.CommandBars.Add(“word manager“, , , True) Set mBtn1 = mBar.Controls.Add(Office.MsoControlType.msoControlBut
64、ton) 第 20 頁 共 31 頁 SetButtonStyle(mBtn1,203,“Button1“,“Testtoaddabuttoninword“,msoButtonIco nAndCaption) End Sub 按鍵對(duì)象定義為 WithEvents,這樣可以添加它的事件處理代碼: Private Sub mBtn1_Click (ByVal Ctrl as Office.CommandBarButton, CancelDefault as Boolean) Dim doc As Word.Document 操作 word 對(duì)象 Form1.Show 取 Word 的當(dāng)前活動(dòng)文檔,
65、顯示 Form1 窗 體 End Sub 5.3.35.3.3 連接數(shù)據(jù)庫連接數(shù)據(jù)庫 在 Visual Basic6.0 中,可使用三種數(shù)據(jù)訪問接口,即 ActiveX 數(shù)據(jù)對(duì)象 (ADO) 、遠(yuǎn)程數(shù)據(jù)對(duì)象(RDO)和數(shù)據(jù)訪問對(duì)象(DAO) 。數(shù)據(jù)訪問接口是一 個(gè)對(duì)象模型,代表了訪問數(shù)據(jù)的多種方法。ADO 又稱 OLE 自動(dòng)化接口,采用 了類似 DAO 和 RDO 的約定和特性,從而使其更易手于使用,它是由 Microsoft 推出的最新、功能最強(qiáng),且容易使用的數(shù)據(jù)訪問實(shí)例(OLE DB)的應(yīng)用程序接 口。OLE DB 可以極高的性能訪問數(shù)據(jù)源,其中包括關(guān)聯(lián)和非關(guān)聯(lián)數(shù)據(jù)庫、電 子郵件和文件系統(tǒng)
66、、文本和圖形、定制商業(yè)對(duì)象等。 其中 ADO 是最新的,它最簡(jiǎn)單也最靈活。因此,此系統(tǒng)使用 ADO 作為數(shù) 據(jù)訪問接口。 數(shù)據(jù)庫控件使用:ADO Data 控件使用 Microsoft ActiveX Data 對(duì)象 (ADO)快速創(chuàng)建數(shù)據(jù)綁定控件和數(shù)據(jù)提供者之間的連接。能夠執(zhí)行數(shù)據(jù)綁定 的 ActiveX 控件包括 DataGrid、DataCombo、Chart 和 DataList。 DataCombo 和 DataList 控件都有五種特殊的屬性: 1.DataSource:DataComno 和 DataList 控件被綁定的 ADODC 控件的名稱 2.DataField:由 DataSource 屬性所指定的記錄集中的字段名稱。 3.RowSource:將要用于填充列表的 ADODC 的名稱。 4.BoundColumn:由 RowSource 屬性指定的記錄集中的字段名稱。該字段 必須與用來更新列表的 DataField 的類型相同。 5
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 朝花夕拾名著研讀(精華課件)
- 人力資源管理專大業(yè)學(xué)生調(diào)查
- 人力資源管理-績(jī)效管理概念
- 旅游公關(guān)系課件大賽
- 低碳經(jīng)濟(jì)下電力設(shè)備現(xiàn)實(shí)的應(yīng)用與發(fā)展
- 高效溝通技能技巧(PPT37頁)
- 運(yùn)營管理Charpt7庫存管理_講義課件
- XX科技集團(tuán)成本管理報(bào)告
- (心理學(xué))第四章感知覺課件
- 人教版初中生物1-4冊(cè)教材分析課件
- 人教版二年級(jí)語文下冊(cè)-第3課-筍芽?jī)?課件
- 《冬夜讀書示子聿》課件(教育精品)
- 語言《四和十》
- 譯林牛津版模塊三第三單元project公開課課件
- 國有企業(yè)的發(fā)展與改革