增强Visual C++开发环境
2000-08-31 14:16:02
微软的Visual C++(以下简称VC)是目前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的界面类似)等等。
在宏或者插件里,VC的集成开发环境本身以及它的各个部件都可以作为对象来进行操作。例如,通过操作与项目的文件对应的对象,可以对某个文件进行打开、编辑和关闭等操作。类似的,操作与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属性来访问它所属的对象。
VC这种环境的对象封装机制为我们开发VBScript宏和插件来扩展VC集成开发环境的功能提供了极大的方便。下面就让我们具体看看怎样来开发VBScript宏和插件,利用VC的Automation机制,增强VC开发环境的功能,以方便自己日常的开发工作。
VBScript宏 VBScript宏是使用VBScript语言写的不带参数的过程。VBScript宏不单单可以用在VC里,在微软的Office工具里也可以使用。我们可以使用宏来极大地简化VC里的一些工作,例如组合一些命令、进行一些快速编辑或者自动进行一些复杂的处理等等。VBScript宏以Sub语句开始,然后是执行一些操作的VBScript语句,以End Sub语句结束。
我们先来看一个具体的宏。下面是快速创建一个C/C++文件的VBScript宏。 Sub CreateCPPFile Set CPPDoc = Document.Add("Text") CPPDoc.Language = dsCPP End Sub
从这个简单的宏,我们可以看到: * Sub语句开始一个宏的定义,这个宏的名字是CreateCPPFile。宏的名字是任意的,可以选择易于记忆的名字。 * 宏的第一行使用Documents对象的Add方法,往Documents对象里增加了一个Document对象,从而创建了一个新文件。 * 宏的第二行通过设置Document对象的Language属性为常量dsCPP(代表C/C++),指定该文件的类型是C/C++文件。 * End Sub语句结束这个宏。 得到一个VBScript宏有两个途径:记录或者手工书写。最简单、最容易的方法当然是记录啦!在你记录一个宏的时候,宏记录器跟踪你的动作,把这些动作转换成VBScript语句,然后把这些语句插入到宏里面。
VC提供了两种宏记录的方法:正常宏记录和快速宏记录。 快速宏记录则可以快速记录你的一些动作,而不需要命名、描述或者编辑这个宏,但是只可以保存一个,重新记录将删掉原来的快速宏。记录快速宏的简单过程如下:(1)选择Tools菜单里的Record Quick Macro命令;(2)执行需要记录的动作,在执行动作的过程中可以使用宏记录器工具条上的Pause暂停按钮来临时中断记录或者继续记录;(3)完成所有动作后,点击宏记录器工具条上的Stop按钮即可。需要使用这个快速宏,选择Tools菜单的Play Quick Macro命令即可。
如果你想要记录一个复杂的宏,而且要进行一些编辑,那就要使用正常的宏记录了。录制正常宏的过程如下:(1)选择Tools菜单的Macro命令打开宏管理器,如图1所示;(2)如果需要把宏加到一个新的宏文件里,点击Options按钮,点击New File按钮,然后在Macro File框里填入文件名字;如果需要把宏加到一个已有的文件里,则从Macro File的下拉框里选择文件;(3)在Macro Name框里写入宏的名字;(4)点击Record按钮;(5)在Add Macro对话框里写入宏的描述,点击OK按钮;(5)执行需要记录的动作,中间可以点击Pause按钮暂停或者继续;(6)点击Stop按钮完成录制,这时候VC将打开宏文件,并且把光标停在宏的起始点,你可以对宏进行检查或者编辑。
图1 也可以往一个新的或者已有的宏文件里添加代码,直接手工写一个宏。步骤如下:(1)选择Tools菜单的Macro命令打开宏管理器;(2)选择宏文件或者新建宏文件;(3) 在Macro Name框里写入宏的名字;(4)点击Edit按钮;(5)在Add Macro对话框里写入宏的描述,点击OK按钮,VC将打开宏文件,在文件的尾部为新的宏创建一个架子-Sub块,如下所示(假设宏的名字为MyMacro): Sub MyMacro() 'Description: The macro description goes here 'TODO: Insert the macro code here. //这一段是自己编写的,为选中的文本加C语言的注释符号 ActiveDocument.Selection = "/*" + ActiveDocument.Selection + "*/" End Sub 你就可以往这个架子里填写入具体操作了。
在记录或者编写好宏以后,宏将被保存在一个文本文件-宏文件里。在你开始记录或者编写新的宏的时候,需要选择宏文件。宏文件的扩展名为.DSM,包含了一个或者多个VBScript宏,数量看需要而定。宏文件的一般格式是:开始是对这个文件的一些描述,然后就是每个宏的具体定义。
在VC里使用宏文件需要先安装。一旦安装了以后,每次启动VC的时候都会自动装载这些宏,可以在所有的项目里使用,不依赖于项目。安装宏文件的方法如下:(1)选择Tools菜单的Customize命令;(2)选择Add-ins and Macro Files页签,如图2所示,如果宏文件的名字没有出现在窗口里,则点击Browse按钮去定位。(3)在窗口里打勾选上需要安装的宏文件即可;如果取消选择某个宏文件,则会卸载这个宏文件。
图2 有了VBScript宏,只要运行它即可以自动帮你完成所需要的操作啦!如果需要经常运行某个宏,那么可以为这个宏分配一个工具条按钮或者热键,这样就可以通过点击按钮或者按热键方便地运行这个宏了。分配按钮的具体设置是:(1)选择Tools按钮的Customize命令;(2)选择Commands页签;(3)在Category框里选择Macros;(4)在Commands框里,把要分配工具条按钮的宏直接拖放到工具条上;(5)这时会弹出一个Button Appearance对话框,如图3所示,为这个按钮选择一个合适的位图,点击OK即可,VC将在工具条上添加上这个宏的一个按钮。分配热键的方法是:(1)选择Tools按钮的Customize命令;(2)选择Keyboard页签;(3)在Category框里选择Macros;(4)在Commands框里,选择要分配热键的宏;(5)点击Press new shortcut key框,按下热键,然后点击Assign按钮就可以了。
图3
VC插件 前面提到,VBScript宏和VC插件都可以用来扩展VC集成开发环境的功能,美观、改造VC的界面,但是它们是有区别的。主要的区别当然在于:VBScript宏是使用VBScript语言写的过程,而VC插件则是使用VC或者Visual Basic开发的COM构件。 开发VBScript宏比开发插件容易多了。生成一个VBScript宏只需要记录宏、增加一些代码(需要的话),然后运行就可以了。而生成一个插件需要VC来编写代码,编译成DLL,然后与VC的集成开发环境连接(安装插件),才能使用它提供的功能。 VBScript宏在功能上弱于插件。在宏里面,只能够使用VBScript语言,只能访问VC集成开发环境的对象;而插件则可以使用更多的语言(VC、VB),不仅能使用VC集成开发环境的对象,还可以使用整个计算机系统的资源。例如,宏里面与用户交互只能使用VBScript提供的两个对话框InputBox和MsgBox,而插件则可以使用任何形式的对话框。
从VBScript宏与插件的这些区别可以知道:如果使用VBScript宏可以完成的任务,建议尽量使用VBScript宏,因为开发一个VBScript宏比开发一个插件要简单得多、快得多。VC插件更适合于用来提供复杂的功能,例如:全局查找替换、保存所有的文件并编译、把VC的窗口变成页签式界面(如图4所示)等等。
图4
开发插件的基本步骤如下: 首先,需要设计插件。要确定:插件的功能、是否可以采用VBScript宏来实现(如果可以,就不开发这个插件而选择宏)、插件提供哪些功能、需要使用哪些集成开发环境的对象、需要使用哪些属性和方法、需要几个插件、是否需要使用对话框、使用什么对话框、是否需要使用别的插件、是否需要使用别的应用等等。
其次,需要确定使用什么语言来开发插件。现在Visual C++、Visual Basic的4.0以上的版本都支持VC插件的开发。VC专门为插件开发提供了一个向导,可以帮你完成大部分的工作。如果使用Visual Basic的话,则需要使用一些类型库来访问VC集成开发环境的对象。因此,建议你使用VC来开发比较方便。
接着,需要创建一个插件的项目。使用VC的插件向导,向导将自动创建一个项目。如果使用VB来开发插件,最好以一个例子为基础。
项目创建了以后,就需要编写代码了。如果使用了VC的插件向导或者以VB的一个例子为基础的话,那么大部分代码已经有了,你只需要加入具体处理的一些代码即可。
然后,把项目编译连接成DLL,可以把多个插件合并在一个DLL里。最后,在VC里安装这个插件就可以使用了。运行命令行命令、点击插件提供的工具条按钮或者按插件提供的热键就可以使用插件了。
VC 5.0以上的版本专门为插件的开发提供了一个插件向导。可以使用这个向导轻松、快速地生成插件的基本代码,然后根据自己的需要进行修改。使用VC的插件向导进行插件开发的步骤如下: 首先,设计插件。接着,使用插件向导生成新的插件项目:(1)选择File菜单的New命令;(2)在New对话框里,选择Projects页签;(3)在窗口里选择Developer Studio Add-in Wizard,在Project Name框里填入项目的名字,然后点击OK;(4)这时进入插件向导(见图5),为插件填写名字和描述;如果插件需要工具条按钮,则选上Provides a toolbar选项;如果插件需要处理VC集成开发环境对象的事件,则选上Responds to Developer Studio events选项,向导将为每个事件添加一个代码框架,你必须为需要的事件提供具体的处理;点击OK;(5)在弹出的New Project Information对话框里检查向导即将生成的文件及项目目录,确认正确后点击OK就生成插件项目了。
图5 然后,定制插件的功能或者增加新的功能。插件向导自动生成了添加一个功能到VC集成开发环境的代码,但是如果你需要定制或者添加更多的功能的话,则要修改代码,这个与普通应用开发是一样的。修改需要使用到Application对象的三个方法:使用AddCommand方法添加一个功能;使用AddCommandBarButton方法添加一个工具条按钮;使用AddKeyBinding方法来添加一个热键。具体的做法请参照VC插件开发的帮助。
这里需要简单说明一下VC集成开发环境与插件之间的关系,如图6所示。每一个插件都向外提供了两个对象DSAddIn和Commands。VC的集成开发环境使用DSAddIn对象来装载或者卸载一个插件,使用Commands对象来执行插件提供的功能。具体来说,VC是调用插件的DSAddIn对象的OnConnection方法来装载插件的,这个方法还发布了插件向外提供的功能接口,如果插件包含了事件的处理,还把连接到VC集成环境的事件上。VC调用DSAddIn对象的OnDisconnection方法来卸载插件。Commands对象则包含了AddCommand所加入的每一个功能接口,编写插件的时候必须为每一个功能接口编写代码。
图6
最后,把插件编译连接成DLL。安装插件的方法是:(1)选择Tools菜单的Customize命令;(2)选择Add-ins and Macro Files页签,如果插件的名字没有出现在窗口里,则点击Browse按钮去定位。(3)在窗口里打勾选上需要安装的插件即可;如果取消选择某个插件,则会卸载这个插件。插件安装了以后,VC每次启动都会自动装载这个插件,你就可以使用这个插件提供的功能来为自己的应用开发服务了。 摘自《软件世界》 陈兆良/文 |
404 Not Found
404 Not Found
nginx
|
|