【摩诘 】VS.NET 2003集成环境插件开发指南

一、             简介――Visual Studio.NET插件能做什么?

Visual Studio.NET插件能做很多事情,例如:

1、   编写如CodeRush一样的开发环境代码辅助工具

2、   编写如CodeSmith这样的代码模板工具

3、   编写代码生成器,根据自定义的一些条件自动生成代码。如现在比较流行的一些代码生成工具,如果和开发环境集成,使用起来应该会更加方便。

4、   编写如DataSetPryer这样的调试工具,可以在调试时查看DataSet的内容。

5、   甚至还可以在VS.NET里集成Google搜索引擎,或将MSN集成到VS.NET

这里不再一一列举,总而言之,凡是可以和Visual Studio.NET开发环境相关的,都能以插件的形式进行。

开发VS.NET插件,目前有两种形式:一是利用VS向导生成的VS外接程序;二是利用微软的VSIP开发包(Visual Studio Industry Partner:微软合作伙伴计划)。本文讨论的是第一种方法。

 

二、             程序框架概述

Visual Studio.NET中选择新建项目à其他项目à扩展性项目àVisual Studio.NET外接程序,按照向导生成代码,最后会生成两个工程文件,一个是外接程序项目,一个是外接程序安装项目。可以在外接程序项目里看到生成的项目文件中有个connect.cs文件,该文件有以下几个部分:

1、   类的继承接口及其常量定义

     [GuidAttribute("952A6CFF-8516-4DA0-B0BA-519CB9614525"), ProgId("STDTools.Connect")]

public class Connect : Object, Extensibility.IDTExtensibility2, IDTCommandTarget

{}

Connect类主要从两个接口继承,一个是Extensibility.IDTExtensibility2接口,该接口主要定义了下面几个方法:

OnAddInsUpdate 方法:在环境中加载或卸载外接程序时发生。

OnBeginShutdown 方法:正在关闭环境时发生。

OnConnection 方法:将外接程序加载到环境中时发生。

OnDisconnection 方法:当从环境中卸载外接程序时发生。

OnStartupComplete 方法:环境启动完毕时发生。

 

IDTCommandTarget接口则定义了以下两个方法

Exec 方法:在VS开发环境中选择了某个外接菜单命令时被VS环境所调用。

QueryStatus方法:当VS环境要显示外接菜单时调用该方法查询菜单的状态。

该方法返回指定的已命名命令的当前状态,无论此命令是启用、禁用还是隐藏

 

2、   OnConnection()函数:

本事件处理函数是在插件被加载时发生,一般用于做一些初始化工作,如创建菜单等。该函数的传入参数如下:

object application:定义了IDE自动化对象

 Extensibility.ext_ConnectMode connectMode:连接模式,指明了插件当前的连接模式

ext_cm_AfterStartup 外接程序是在应用程序启动后加载的,或是通过将相应 AddIn 对象的 Connect 属性设置为 True 加载的。

ext_cm_Startup 外接程序是在启动时加载的。

ext_cm_UISetup 外接程序自安装后首次被启动。

object addInInst:表示外接程序实例的 AddIn 对象。

ref System.Array custom: 一个 Variant 数组,可以用来提供附加数据,一般不太常用。

 

3、   OnDisconnection()函数:系统卸载插件时被调用

本事件处理函数是在插件被卸载时发生,其传入参数如下

Extensibility.ext_DisconnectMode disconnectMode:

ext_dm_HostShutdown:外接程序是在开发环境关闭时卸载的。

ext_dm_UserClosed:外接程序是在用户清除“外接程序管理器”对话框中该外接程序的复选框时卸载的

ext_dm_UISetupComplete:外接程序是在环境安装完成后和在 OnConnection 方法返回后卸载的。

ref System.Array custom:

 

4、   QueryStatus()函数:系统查询菜单状态

 

该方法有四个传入参数

CmdName 要检查的命令的名称。

NeededText

一个 vsCommandStatusTextWanted 常数,指定是否返回检查信息,如果返回,还指定返回信息的类型。

vsCommandStatusTextWantedNone不返回信息。

vsCommandStatusTextWantedName返回命令名。

vsCommandStatusTextWantedStatus返回命令状态。

StatusOption

一个指定命令的当前状态的 vsCommandStatus 常数。

vsCommandStatusUnsupported 命令在此上下文中不受支持。

vsCommandStatusSupported 命令在此上下文中受支持。

vsCommandStatusEnabled 命令当前处于启用状态。

vsCommandStatusLatched 命令当前处于锁存状态。

vsCommandStatusNinched 留作将来使用。

vsCommandStatusInvisible 命令当前处于隐藏状态。

CommandText

指定 vsCommandStatusTextWantedStatus 时返回的文本。

 

5、   Exec()函数:

VS开发环境中选择了某个外接菜单命令时被VS环境所调用,在这里可以编写自己的响应代码,例如运行自己的程序或弹出某个窗口。

 

三、             处理菜单

OnConnect方法中可以进行一系列初始化工作,其中之一就是生成菜单

1、   添加菜单条菜单和工具条菜单

applicationObject = (_DTE)application;

addInInstance = (AddIn)addInInst;

if(connectMode == Extensibility.ext_ConnectMode.ext_cm_UISetup

|| connectMode == Extensibility.ext_ConnectMode.ext_cm_Startup)

{//    如果是安装状态或是插件刚被启动的状态,则创建菜单

object []contextGUIDS = new object[] { };

 

//获取IDE环境的Command集合和CommandBar集合

Commands commands = applicationObject.Commands;

_CommandBars commandBars = applicationObject.CommandBars;

 

try

{

    //菜单条对象和工具条对象都是CommandBar类型

CommandBar menuObj,toolbarObj;

 

//生成新的子菜单对象,将会被插入到菜单条和工具条对象上

Command commandObj = commands.AddNamedCommand(addInInstance,

 "PublishUserManage",

 "添加用户管理代码",

"添加用户管理的代码",

true,

127,

ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported+(int)vsCommandStatus.vsCommandStatusEnabled

);

//如何确定在按钮上显示的位图的ID,可以利用附录中的工具

 

#region 相关帮助信息

/*

  返回一个 Command 对象

         [C#]

         public Command AddNamedCommand(

         AddIn pAddIn, //用于添加新命令的 AddIn 对象

string Name, //新命令的名称缩写。AddNamedCommand 会自动给此缩写加上前面类前缀的

             //ProgId("STDTools.Connect")中的"STDTools.Connect"以创建唯一的名称

         string ButtonText,//在命令绑定到以名称而不是以图标显示的按钮时使用的名称

          string Tooltip,    //当用户将鼠标指针悬停在任何绑定到新命令的控件上时所显示的文本

bool MSOButton,    //指示指定命令的按钮图片是否是 Office 图片。True = 按钮图片从

//Office资源文件中获取。False则表示按钮的图片资源来源于其他的文件

         int Bitmap,        //在按钮上显示的位图的 ID

object[] ppsaContextUIGUIDs,

//GUIDSafeArray,它确定启用此命令的环境上下文(即调试模式、设计模式等

int DisableFlags  

//确定当您提供了 ContextUIGUIDs 而当前它们都不活动时,此命令的禁用状态是不可见还是灰色的

         );

 

              DisabeFlags命令的当前状态。

              vsCommandStatusUnsupported 0 命令在此上下文中不受支持。

              vsCommandStatusSupported 1 命令在此上下文中受支持。

              vsCommandStatusEnabled 2 命令当前处于启用状态。

              vsCommandStatusLatched 4 命令当前处于锁存状态。

              vsCommandStatusNinched 8 留作将来使用。

              vsCommandStatusInvisible 16 命令当前处于隐藏状态。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-332354/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12639172/viewspace-332354/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值