没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2009-03-16 09:45:05.000|阅读 900 次
概述:Visual Studio 2008 可扩展性开发(四):添加新的命令
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
前言
在之前的两篇随笔中,我介绍了Add-In的运行机制,这样对Add-In的事件、生命周期、与VS如何交互可以有个基本的了解了。现在是时候看看如何在VS中完成一些操作,这才是Add-In开发的目的所在。
一般的,Add-In应当提供一些界面元素,这样用户可以进行某些操作,比如在主菜单内添加一个菜单项,或者在编辑器的上下文菜单内添加一个菜单项,在本文中就来看看如何实现这些。
关于命令(Command)
考虑一个极为常见的场景:在编写代码的过程中,选中一段文本,点击Edit->Copy(或工具栏按钮)或者按下Ctrl+C,我们可以把选中文本拷贝到剪贴板,这个过程的背后发生了什么?
是什么完成的拷贝操作呢?答案是命令。可以认为命令就是某个特定的功能,如Copy、Paste、Cut等等。VS本身就内置大量的命令(有数千个之多),而上面说到的菜单项、工具栏或快捷键则执行了这些命令。通过Tools->Options菜单可以查看命令列表:
图1:VS的命令列表
值得注意的是,执行命令并非必须通过界面元素,比如在命令窗口中:
图2:在命令窗口执行命令
这样也可以执行同样的命令。现在我们知道存在多种方式来执行命令,即菜单、工具栏、快捷键或命令窗口,这里统称为触发者。在VS中,触发者与命令是分离开来的:用户通过触发者来执行命令,而命令负责检查自身的状态(名称、是否可见、是否可用等等)并执行。这意味着,命令可以对应一个或多个菜单项,也可以不对应任何菜单项。
另一方面,对于同一个命令,比如Edit.Copy,仍然可能有不同的情况。在文本编辑器内和在解决方案管理器内的Edit.Copy命令执行内容并不相同。这里有一个命令目标(Command Target)的概念,VS将命令转向给了命令目标,而命令目标按自己的实现来执行该命令。总结下来就是:
对象 | 职责 |
触发者 | 提供一种方式供用户使用 |
命令 | 一个逻辑实体,检查自身的状态,可以执行命令,也可以转向一个命令目标 |
命令目标 | 根据传递过来的命令,按自己的实现来执行它 |
关于命令栏(CommandBar)
命令是个“乖孩子”,首先是我们让它做什么它就做什么,第二就是它不会单独出门,它会跟其它同伴待在一块儿,它们都被放在命令栏中。比如主菜单中File下的那些菜单项。
既然这样,如果希望向已经存在的命令栏内添加命令,就得首先找到命令栏才能添加。现在来看一个例子,向Tools菜单中添加一个菜单项。
添加一个新命令
使用Add-In向导新建一个Add-In,名字定为NEnhancer,意为对VS进行增强:),以后关于Add-In的例子都会放在这里面。注意要选中向Tools菜单添加一个菜单项。在Connect类的OnConnection方法中可以看到添加菜单项的代码如下:
代码的功能可以查看其中的注释。首先通过资源文件获取Tools菜单的名称(文化相关的),然后是获取主菜单,这里用的就是CommandBar,这里通过名称从DET2.CommandBars集合中进行查找。往下可以看到Tools菜单是主菜单栏下的一个CommandBarPopup控件,获取了Tools菜单后就可以给它添加命令了,其关键是AddNamedCommand2方法,它的参数信息为:
从本文开头举的例子可以看到,对于VS内置的菜单项,它们对应的命令名称是有一定规律的,即按照菜单的嵌套关系,如Edit.Copy,表示Edit下的Copy项(有空格的话要去掉)。那么对于我们的Add-In来说,也是有规律的,即Namespace.ClassName.CommandName,这里就是NEnhancer.Connect.NEnhancer。
命令的名称应当反应它的意图,所以这里把AddNamedCommand2的第二个参数改为CommandViewer。前面提到过,VS中有很多命令,它们按照命令栏来组织,这里就做一个Add-In来查看所有的命令和命令栏,方便以后的开发。
命令的执行
现在命令和菜单项是添加了,当用户点击菜单时,如何处理它呢?要实现IDTCommandTarget接口,一旦实现了它,我们的Connect类就成为一个合格的命令目标(Command Target)了。确切地说,当用户点击菜单时,VS要执行它的Exec方法,Exec方法有如下几个参数:
命令的状态
有的命令并不总是可用,比如我们开发了一个Add-In,它专门针对于文本编辑器,如果没有任何文件打开,它就不应该是可用的。这里要使用IDTCommandTarget接口的另一个方法QueryStatus,它的参数有:
好了,了解了命令的概念,也知道如何添加、执行命令了,剩下的就是实现命令的功能了。这里要新建一个窗体,添加一个TreeView来显示命令栏和命令:
图3:CommandBarViewer窗体
要查看该窗体的具体代码,可以在文章末尾处下载代码。
现在只要在Connect类中稍作修改显示窗体:
通过这个例子,我们可以了解如何添加新的命令并执行它,其中的关键方法包括OnConnection、AddNamedCommand2、Exec、QueryStatus。本文前面曾提到过命令的命名规则,我们可以由此获知某个菜单项对应的命令,这样就可以在Add-In中使用该命令而不需要再重新发明一次轮子。
执行已有命令
先看下图。
我们可以关闭当前文档,也可以关闭其它文档,就是不能关闭所有文档。有时候还是需要这个功能的,我想你应该用过Window->Close All Documents菜单项吧?它实现的正是我们所需要的,现在考虑如何使用这个已有的命令。首先得找到这个命令,按前面的规则,我们到Tools-Options里面去找(见图1),我们可以试着输入window.close,这时就可以看到了:Window.CloseAllDocuments。
接下来跟前面例子类似,首先要添加一个命令,前面是把命令添加到了主菜单栏(通过“MenuBar”获取命令栏),现在要添加到另外一个命令栏:“Easy MDI Document Window”,这名字有些奇怪(我是在所有的CommandBar中搜了好多次才找到的),在刚才添加Tools菜单项的代码下面添加如下代码:
要使用Window.CloseAllDocuments命令只要一行代码:
现在菜单项看起来应该是这样的:
赶紧试一试吧!这里再提一下,在测试、调试完成之后,如果要发布Add-In,最简单的方法是将dll和.AddIn放在[My Documents Path]\Visual Studio 2008\Addins,同时把那个用来测试的.AddIn文件(如NEnhancer - For Testing.AddIn)移掉。
代码下载请点击这里。
我们身在何处?
本文首先介绍了命令和命令栏的概念,正是通过命令VS才可以与Add-In进行交互。然后通过两个例子解释了如何添加、执行命令,以及如何执行VS内置的命令,接下来我们就有办法操作VS的方方面面了:解决方案、项目、文档、代码等等,敬请期待:-)
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:博客园面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号