闡述增強(qiáng)Visual C++開發(fā)環(huán)境的功能
對于官方推出的Visual C++是目前Windows平臺(tái)上***的C++集成開發(fā)環(huán)境之一,有大量的應(yīng)用程序和軟件都是使用它來開發(fā)出來的。VC的開發(fā)環(huán)境提供了強(qiáng)大的功能,為開發(fā)人員方便、快速、高效地開發(fā)應(yīng)用給予了強(qiáng)有力的支持。
但是由于程序員各有各的特點(diǎn)和習(xí)慣,所以還可能會(huì)有很多對編程開發(fā)環(huán)境不同的需要。VC的IDE集成開發(fā)環(huán)境充分考慮到了這一點(diǎn),專門提供了對開發(fā)環(huán)境進(jìn)行擴(kuò)展的功能,使得開發(fā)員可以根據(jù)需要,通過一些編程開發(fā)來增強(qiáng)VC開發(fā)環(huán)境本身的功能。
Visual C++自動(dòng)化機(jī)制
在使用VC來進(jìn)行開發(fā)的時(shí)候,在VC的集成開發(fā)環(huán)境里可以手工進(jìn)行很多操作,例如:使用菜單命令來打開一個(gè)項(xiàng)目、修改源文件、保存文件,然后編譯連接得到可執(zhí)行的文件等等。這些操作大部分都是例行的、重復(fù)多次進(jìn)行的。 #t#
VC提供了一種Automation自動(dòng)化(來自以前的OLE自動(dòng)化)的擴(kuò)展機(jī)制。VC的開發(fā)者可以通過開發(fā)VBScript宏或者插件,讓IDE來自動(dòng)執(zhí)行一些操作。好處是顯然的:可以大大縮短這些操作的時(shí)間,而且還可以避免在手工操作可能出現(xiàn)的一些錯(cuò)誤,如遺漏、鍵入錯(cuò)誤等等。VBScript宏是使用VBScript語言寫的一些程序,而插件則是使用VC或者Visual Basic開發(fā)的COM構(gòu)件。
我們還可以使用VBScript宏和插件來對VC本身的界面進(jìn)行美化、改造,例如為VC的窗口加上頁簽(與Delphi的界面類似)等等。
在宏或者插件里,Visual C++的集成開發(fā)環(huán)境本身以及它的各個(gè)部件都可以作為對象來進(jìn)行操作。例如,通過操作與項(xiàng)目的文件對應(yīng)的對象,可以對某個(gè)文件進(jìn)行打開、編輯和關(guān)閉等操作。類似的,操作與IDE中的窗口對應(yīng)的對象,可以激活一個(gè)窗口、改變窗口的大小等等。
一個(gè)對象可以是集成開發(fā)環(huán)境的一個(gè)部件,或者一組相關(guān)的部件。例如,一個(gè)Document文件對象表示一個(gè)打開的文件,而Documents對象則表示所有打開的文件。類似,一個(gè)Window窗口對象表示一個(gè)打開的窗口,而Windows對象表示所有打開的窗口。Documents和Windows對象稱為集合對象,它們包含了相關(guān)的一組對象。
每一個(gè)IDE環(huán)境的對象都實(shí)現(xiàn)了一個(gè)雙向的接口,提供了大量的方法、屬性和事件,在開發(fā)VBScript宏和插件的時(shí)候需要使用這些方法、屬性和事件來操作這些對象。同時(shí),每一個(gè)對象為Automation機(jī)制實(shí)現(xiàn)了一個(gè)IDispatch接口和一個(gè)COM接口,來支持對對象成員(屬性、方法和事件)的訪問。
為了更好地操作集成開發(fā)環(huán)境的對象,必須知道這些對象之間的關(guān)系。對象之間有一個(gè)層次包含的關(guān)系。Application對象是最頂層的,其它的對象都是從屬于它的。有了這個(gè)關(guān)系,就可以使用Application對象的屬性和方法來直接訪問它的所有下屬對象啦!VC集成開發(fā)環(huán)境的對象以及它們之間的包含關(guān)系如下:
- Application
- Application(Application也可以包含自己)
- Projects
- Project
- Configurations
- Configuration
- Configurations(循環(huán))
- Documents
- Document
- Window(一般窗口)
- TextDocument
- TextSelection
- TextWindow
- Window(文本窗口)
- TextEditor
- Windows
- Debugger
- Breakpoints
- Breakpoint
例如,Breakpoints對象有一個(gè)Breakpoint對象作為它的屬性之一,也就是說Breakpoints對象包含了一個(gè)或者多個(gè)Breakpoint對象。這樣就可以通過一個(gè)對象的屬性來訪問它包含的所有下屬對象。反過來,也可以通過一個(gè)對象的Parent屬性來訪問它所屬的對象。
Visual C++這種環(huán)境的對象封裝機(jī)制為我們開發(fā)VBScript宏和插件來擴(kuò)展VC集成開發(fā)環(huán)境的功能提供了極大的方便。下面就讓我們具體看看怎樣來開發(fā)VBScript宏和插件,利用VC的Automation機(jī)制,增強(qiáng)Visual C++開發(fā)環(huán)境的功能,以方便自己日常的開發(fā)工作。