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