在上一篇文章手把手教你制作vs2005装饰 中,主要介绍了如何创建和部署addins,在有了这个基础的前提条件下,我们看下如何在解决方案资源管理器中如何添加右键菜单和如何自定义输出。$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
仍然是在OnConnection中添加创建右键菜单的代码:$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
CommandBarEvents menuItemHandler;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
    string  addinName =$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
"垃圾清除";$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
_applicationObject
= (DTE2)application;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
  _addInInstance
= (AddIn)addInInst;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
//获得项目的命令行菜单$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
CommandBars cmdBars = (CommandBars)(_applicationObject.DTE.CommandBars);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
CommandBar vsBarProject
= cmdBars["Project"];$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
CommandBarControl menuItem
= vsBarProject.Controls.Add(MsoControlType.msoControlButton, 1, "", 2, true);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
menuItem.Tag
= addinName;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
menuItem.Caption
= addinName;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
menuItem.TooltipText
= addinNam$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
    menuItemHandler
= (CommandBarEvents)_applicationObject.DTE.Events.get_CommandBarEvents(menuItem);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
menuItemHandler.Click
+=$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
new _dispCommandBarControlEvents_ClickEventHandler(MenuItem_Click); 
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
上面一段代码,作用是在项目的右键菜单上增加一个名称为垃圾清除的菜单,CommandBars和CommandBar是用于管理命令栏的接口,通过$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
menuItemHandler = (CommandBarEvents)_applicationObject.DTE.Events.get_CommandBarEvents(menuItem);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
menuItemHandler.Click += new _dispCommandBarControlEvents_ClickEventHandler(MenuItem_Click);  $©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
来添加子菜单的点击事件。$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
private$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
void MenuItem_Click(object commandBarControl, ref$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
bool handled, ref$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
bool cancelDefault)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
       
{$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
           
try$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
           
{$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
                Project prj
= (Project)((Array)_applicationObject.ActiveSolutionProjects).GetValue(0);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
                SpilthCleaner.Executor e
=$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
new SpilthCleaner.Executor();$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
               
string res = e.Clear(System.IO.Path.GetDirectoryName(prj.FullName), prj.FullName);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
                OutputWindowTest(_applicationObject, res);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
            }
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
           
catch (Exception ex)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
           
{$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
                OutputWindowTest(_applicationObject, ex.Message);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
            }
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
        }
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
Click事件中是完成了对项目垃圾文件的清除和清除结果的输出,要想在输出窗口中输出自定义的内容,可以使用下面的方法$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
public$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
void OutputWindowTest(DTE2 dte,string outputStr)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
       
{$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
           
//获得输出窗口$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
            OutputWindow ow = dte.ToolWindows.OutputWindow;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
           
//创建属于自己的输出类型$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
            OutputWindowPane owP;        $©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
            owP
= ow.OutputWindowPanes.Add("垃圾清理");$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
           
//输出文字内容$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
            owP.OutputString(outputStr);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
        }
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
这篇文章参考了dudu老大的 VS 2005 Add-in开发随笔  ,非常老大为我指明了方向。$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
vs2005是一个扩展性比较强大的平台,虽然没有eclipse支持插件那样猛,可通过我们的挖掘,还是能在vs2005上安装不少装饰的,我这篇主要写了如何添加右键菜单和输出自定义内容,这个菜单主要完成的工作是清除项目文件夹中没有被项目引用的垃圾数据,下面是源码,大家使用的时候,将相应的.dll和.addins拷贝到C:\Documents and Settings\Administrator\MyDocuments\Visual Studio 2005\Addins就可以了$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
有关垃圾清除的文章:发布小工具- 项目垃圾文件清理器(更新070920)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
上篇文章: 手把手教你制作vs2005装饰 $©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
源码文件:/Files/jillzhang/SpitchCleaner.rar$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
效果图:$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
1.在项目的右键菜单增加 垃圾清理 子菜单$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
2.点击垃圾清除后的自定义输出$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
  $©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
不明白的TX,可以下载源程序下去看看$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf