上一次我们实现了一个带有命令(Command)的package,这一次让我们更进一步:创建一个被称为工具窗(Tool Window)的界面。那么,什么是工具窗呢?让我们想象一下:解决方案浏览器(Solution Explorer)、工具箱(Toolbox)、错误列表(Error List),它们都是工具窗(Tool Window)。

     像前几篇一样,我们依然选择选择Visual Studio Integration Package类型作为项目类型,这一次我们把它命名为SimpleToolWindow。当项目向导出现后,我们选择C#做为开发语言,并利用向导为我们的程序集自动生成一个key文件。在VSPackage Information页面,我们输入如下内容:

(翻译)LearnVSXNow!-#4 创建一个带有工具窗的Package 

     在下一步,我们选中Tool Window复选框,以便为我们的package创建一个工具窗。

(翻译)LearnVSXNow!-#4 创建一个带有工具窗的Package 

     紧接着,向导会要求我们填入工具窗口的名字(标题)和对应命令的ID,请按照下图填入:

(翻译)LearnVSXNow!-#4 创建一个带有工具窗的Package

     虽然我们没有选择菜单命令(Menu Command),但向导会帮我们在“视图|其他窗口”子菜单下帮我们创建一个菜单项。该菜单项会和我们的工具窗关联起来。

     在向导的最后一步我们可以建立集成测试项目和单元测试项目,请勾掉这两个选项并且点击Finish按钮。向导会在几秒钟内帮我们创建项目的源文件。

     生成并运行SimpleToolWindow项目。当Visual Studio实验室启动后,你可以在“视图|其他窗口”菜单下看到一个新的菜单项:

(翻译)LearnVSXNow!-#4 创建一个带有工具窗的Package 

    单击这个菜单项,就会打开我们的工具窗。通过拖动它的标题栏,可以移动它到任何位置或者固定它,就像其他的工具窗一样:

(翻译)LearnVSXNow!-#4 创建一个带有工具窗的Package

 

     同时,向导帮这个工具窗生成了代码逻辑:当点击这个窗口的按钮时,它会弹出一个消息框。

 

源文件分析(What is inside?)

     向导帮我们生成了PkgCmdID.cs文件,这个文件的功能和上一篇SimpleCommand中的一样。在这里这个文件定义了“视图|其他窗口”菜单下的命令MyToolWindow的标识符。

     向导也生成了用于定义菜单资源的SimpleToolWindow.vsct文件,这和上一篇的SimpleCommand一样。

     和上一篇的SimpleCommand相比,真正不一样的地方是这里多了两个新文件。MyControl.cs文件定义了工具窗用到的用户控件MyControl类,MyToolWindow.cs文件定义了应用MyControl实例的工具窗类。当我们改变工具窗的大小时,会自动改变嵌入的MyControl的大小。

     现在让我们看一下MyControl控件的实例是怎样嵌入在工具窗中的,下面是MyToolWindow.cs文件中的代码:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio.Shell;  
namespace MyCompany.SimpleToolWindow
   6: {
)]
class MyToolWindow : ToolWindowPane
   9:   {
private MyControl control;  
  11:  
null)
  13:     {
this.Caption = Resources.ToolWindowTitle;
this.BitmapResourceID = 301;
this.BitmapIndex = 1;
new MyControl();
  18:     }
  19:   
public IWin32Window Window
  21:     {
return (IWin32Window)control; }
  23:     }
  24:   }
  25: }

相关文章:

  • 2021-12-23
  • 2021-12-16
  • 2022-01-19
  • 2021-07-08
  • 2021-10-24
  • 2021-09-09
  • 2021-09-16
猜你喜欢
  • 2022-01-10
  • 2021-09-10
  • 2021-06-01
  • 2022-02-10
  • 2022-02-13
  • 2021-07-28
相关资源
相似解决方案