- 热门文章:
- · 手动快速卸载windows vista系统的方法
- · .Net Framework3.0 实践纪实之布局
- · 观点:.NET发展中的几个失误
- · sata串口硬盘windows vista驱动安装实录
- · 基于AJAX.NET技术的DataGrid控件开发
- · 在.NET下多层架构企业管理系统的开发
- · windows vista系统应用程序安装测试情况
- · vista显存需求有大学问 intel老大将不保
- · 在.net中利用委托实现窗体间通信
- · 抛弃win xp!细数升级vista的五大理由
- · 激活windows vista 启动logo画面
- · 关于.NET动态代理的介绍和应用简介
上一篇:比xp做得更好:寻找windows vista漏洞 >>
通过包技术扩展Visual Studio 2005
在本文中,你将会看到使用包扩展Visual Studio环境是多么容易。构建一个包是很简单的,但是要精通之却很难。很明显,这是因为,微软已经为你实现了所有结构化框架部分,其它的将由你来编写功能各异的代码。
开始前,你需要安装如下软件:
·Visual Studio 2005
·Visual Studio Industry Partners(VSIP) SDK
一、 用三步法构建一个包
下面是对创建一个包的大致概括:
1. 使用Visual Studio 2005创建一个新工程。在工程类型下,选择“Other Project Type ->Extensibility”,然后选择“Visual Studio Integration Package”。如果需要的话,你可以改变缺省设置,但是在此仅为了说明创建一个工作包的过程,所以我们全部使用缺省设置。
2. 点击OK启动“Visual Studio Integration Package”向导。
a. 在第一步中,选择Visual C#;
b. 在第二步中,你可以进行更改或使用缺省项;
c. 在第三步中,点选“Menu Command”;
d. 在第四步中,使用缺省项。
3. 最后,向导为你创建所有文件(描述如下)。但是,只是为了实际看一下包的话,你不需要做任何其它事情。只需在按F5键后,静观发生的情况即可。
|
图1.基本包消息 |
当新IDE启动时,你将看到一个新选项出现在Tools菜单下—“My Command Name”。选择它后,你会看到一个如图1所示的对话框。
到目前为止,你已经看到了一个可以工作的基本的包。尽管它目前所实现的仅是生成一个消息框,但是它向你展示了所有必需的结构化代码,接下来则由你创造性发挥了。后面将向你介绍包方案的不同部分;或者更准确地说,在哪里实现你的创造性编程。
二、 插件还是包?
在细致讨论一个包的不同部分之前,了解一下它与一个插件的区别可能很有好处。下列是一个简单的对照比较:
| 插件 | 包 |
| 高级(通常基于C#或VB.NET,还有C++) | 低级(基于COM对象,通常使用C++或C#经由互操作程序集) |
| 增强IDE UI,例如新命令、工具条、工具窗、按钮、事件响应、顶级菜单、上下文菜单 | 提供一个插件的所有特征,还有新工程类型,文档类型,编辑器,.NET语言,源代码控制集成,等等 可以使用可扩展性工程类型创建 需要VSIP SDK |
| 实现IDTExensibility2接口 | 实现IVSPackage接口 |
| 使用Visual Studio自动化对象模型定制现有IDE和自动化任务。 | 基于IDE本身所使用的低级COM对象和服务 |
一般地,你可以创建为IDE所识别的插件并且把它们加入到菜单中(通常是在Tools菜单下,除非你指定其它位置)。一旦激活这些插件,它们就可以与IDE中的其它不同的组件一起工作,例如编辑器格子或输出格子。
然而,包也可以创建新的IDE组件,例如一个专门构建用于与你的产品或语言一起工作的编辑器格子。借助于SDK中所包含的“Package Creation”向导,你可以用三种方式创建一个包:
· 文件菜单:作为顶级菜单“Tools”下的一个新菜单项
· 工具窗口:作为可以从菜单栏中激活的一个新工具窗口
· 定制编辑器:作为一个针对你自己的文件类型的全新的编辑器
三、 包模板中的文件
当从“VS Integration Package”中创建一个包工程时,包创建向导将自动地把若干新文件添加到你的工程;如果你创建一个插件的话,添加的文件还要多。大多数这些文件包含一些在代码中加了注释的文档或背景信息。下面是你的工程可能包括的一个文件列表。注意,其中一些文件特定于某些类型的包。
| 文件名 | 文件菜单 | 工具窗口 | 定制编辑器 | 描述 |
| Properties/AssemblyInfo.cs | X | X | X | 属性,例如标题、描述、版权和版本 |
| CtcComponents/Guids.h | X | X | 唯一命令标识符列表 | |
| CtcComponents/PkgCmdID.h | X | X | 用于定义命令条的命令ID | |
| CtcComponents/Resource.h | X | X | 资源ID | |
| CtcComponents/VsPackage1.ctc | X | X | 实际布局和命令类型 | |
| Resources/Images_24bit.bmp | X | 真彩色工具图标集,其中一种颜色用于透明度表示 | ||
| Resources/Images_32bit.bmp | X | X | 真彩色工具图标集,含有一个8位的alpha通道 | |
| Resources/Package.ico | X | X | X | “Help->About”对话框的示例图标 |
| Resources/File.ico | X | 示例文件图标 | ||
| EditorFactory.cs | X | 相应于“editor factory”的起始代码 | ||
| EditorPane.cs | X | 所有你需要定制一个编辑器格子的起始代码 | ||
| Guids.cs | X | X | X | 一个你的GUID列表,例如相应于包和命令集(必须匹配Guids.h) |
| Key.snk | X | X | X | 签名程序集的密钥文件 |
| MyEditor.cs(名字可能有所不同) | X | 实际的Rich Text Box,用作你的编辑器;在EditorPane.cs中实例化 | ||
| MyControl.cs | X | MyToolWindow的UI | ||
| MyToolWindow.cs | X | 你的工具窗口的起始代码;一个ToolWindowPane的子类 | ||
| PkgCmdID.cs | X | X | 你的命令ID列表(必须匹配PkgCmdID.h) | |
| VsPkg.cs | X | X | X | 实现你的包的核心代码 |
四、一个详细的定制编辑器和命令的例子
在这个例子中,我们不是把新功能添加到现有IDE,而是创建一个新的编辑器。所以,你实质上是在重建一个IDE的核心方面。
那么,为什么要创建编辑器呢?当你想提供一个开发者可以在其中管理新文件类型或是全新语言的定制工作空间时,你可以构建一个编辑器。为了说明你能够完成的各种任务,我们可以把编辑器划分为四个类型:
标准的基于文件的编辑器—一个通用编辑器,提供简单的文本编辑功能,并且包括基本功能,如删除和插入。
Visual Studio核心编辑器—与IDE使用的一样的编辑器;你可以在其中使用某种Visual Studio工程类型。
定制编辑器—它与你创建的一个定制工程类型一起工作,包括构建到你的工程中的任何独有特征。
外部编辑器—一个独立的编辑应用程序,如记事本,你可以从你的包中进行调用。
上面的可扩展性SDK发行中含有一个独立的帮助文件,其中包括一些优秀的创建各种编辑器教程。作为入门,下列步骤将向你介绍使用菜单命令创建一个定制编辑器的过程。其实,你有太多的自由工具可以使用,但篇幅所限,在此恕不详及。
首先,打开Visual Studio并创建一个新工程。同前一样,选择“Other Project Type->Extensibility”,然后选择“Visual Studio Integration Package”。命名这个工程为“MySpecialEditor”。
|
图2.菜单命令和定制编辑器 |
· 选择Visual C#并且让向导生成一个新key文件。
· 添加你的公司名,并且命名VSPackage为“My Special Editor”。
· 当选择VSPackage选项时,选择“Menu Command”和“Custom Editor”,见图2。
· 对于命令名,输入“My Special Command”,并且指定该命令ID为“cmdidSpecial”。
· 在这个例子中,输入编辑器名为“My Special Editor”,文件扩展名是“specedit”,且缺省文件名为“MySpecialEd”。
· 最后点击Finish,向导开始安装所有内容。需要的话,你可以按F5并且观察所发生的事情。
还要提及的是,该SDK发行中提供了大量有关类和接口的文档。目前为止,只要把你的菜单命令从Tool菜单下的默认位置移动到Edit菜单并且给它一个新图标即可。
· 打开MySpecialEditor.ctc并且转到NEWGROUPS_BEGIN部分。下面一行:
guidMySpecialEditorCmdSet:MyMenuGroup,
guidSHLMainMenu:IDM_VS_MENU_TOOLS,0x0600;
改为:
guidMySpecialEditorCmdSet:MyMenuGroup,
guidSHLMainMenu:IDM_VS_MENU_EDIT,0x0600;
· 打开MySpecialEditor.ctc并转到BUTTONS_BEGIN部分。在以下列内容开头的行中:
guidMySpecialEditorCmdSet:cmdidSpecial,...
查找:
...guidMySpecialEditorCmdSet:bmpPic1,...
并且用下列内容代替它:
...guidMySpecialEditorCmdSet:bmpPicArrows,...
按F5运行应用程序。当你选择“File->New File”时,你将在选项下看到你的新文件类型。选择它后,你就得到一个新的空的等待输入代码的定制编辑器。你可以在编辑选项下找到你的新命令(见图3)。至此,这个例子还没有实现多少功能;但是你已经可以很容易移动你的菜单,甚至包括在其它标题下创建新菜单组。你可以输入一些文本,保存它。最后,你就会看到你的默认文件名和扩展名显示出来。
|
图3.新的编辑菜单 |
五、 总结
注意,在VSIP SDK中,也有一篇文章“Walkthrough: Adding a command to an Editor Generated by the Package Wizard”,它更为细致地介绍了如何把其它命令添加到你的菜单上并且影响编辑器本身中的文本内容。但是,你可以自行深入研究。有关如何改进本文中所示编辑器的方面,请参考下面这些题目:
· 自动格式化
· 参数信息提示
· 语句完成
· 语法显亮
· 查找和替换
· 文本标记
· 智能感知
· 撤消支持
· 下拉列表框条
· 键盘绑定
· 上下文菜单
· 状态栏
· 文本层
要查看一个完整的复杂的定制编辑器(包括一个编译器、语言服务,甚至带有一个控制台窗口)的例子,可以参考IronPython.sln方案,它位于“<Installation Path>\VisualStudioIntegration\Samples\IronPythonIntegration”路径下。这个示例包括所有用于把Python集成到你的IDE中的源文件。
下一篇:手动快速卸载windows vista系统的方法 >>
相关文章:
- · 深度体验:windows vista最酷的五大功能
- · windows vista新功能介绍之防误删除技术
- · .NET 2.0中的企业库异常处理块简述
- · wei制度曝光:windows vista界面分五等
- · vista主题确定:aero glass风格最终获胜
- · 全新技术:windows vista系统新技术两则
- · 在.NET 2.0 中使用自定义事务操作
- · 合理攒机:如何满足vista系统的硬件需求
- · 体验windows vista图标设计功能
- · .Net Framework 2.0范型的反射使用
- · 基于VS.NET的自定项目模板研究
- · 详测:win vista beta1对p2p兼容极差
- · .NET下基于组件的分布式系统动态配置
- · 利用数据绑定和模板创建Atlas应用程序
- · 为.NET程序批上WPF的绚丽外衣
- · VS2005中文输入法自动转换的解决方法
- · VS2005与SQL Server2005的整合优势
- · VS2005改善团队开发的人力负担与协调
- · VS2005让软件开发回归软件工程
- · .NET2.0泛型的“近距离”实践
- · 基于VS.NET的自定项目模板研究
- · .NET Remoting构建分布式数据库查询
- · VS2005中用Code Snippets提高开发效率
- · 实现.NET应用程序的自动更新
- · 在.NET中使用命名管道完成进程间通信
- · 揭开.NET消息循环的神秘面纱
- · .NET设计模式研究之装饰模式
- · 浅谈CLR的内存分配和回收机制
- · .NET下的动态代码编译探索
- · 深入ASP.NET 2.0的提供者模型
- · ASP.NET 2.0编程小技巧两则
- · ASP.NET底层架构探索之进入ASP.NET
- · ASP.NET底层架构之从浏览器到ASP.NET
- · 商业周刊:即时通讯中暗藏的风险
- · 3ds max 7.5扩展版的新特色和新功能
- · 美国编程人员年薪同期增长8.7%为IT业最快
- · 金融时报:Web2.0成恶意代码的沃土
- · Web2.0时代,你得到什么?
