在vspackage中修改dte中的命令状态

本文介绍如何在Visual Studio 2010的ToolWindow中实现复制、剪切和粘贴等编辑菜单命令。通过实现IOleCommandTarget接口并覆盖Exec和QueryStatus方法,可以为ToolWindow添加这些标准命令的支持。

文章来源:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/5b3ffafa-5cc7-4eae-8a7a-29d688872713/vspackage-2010-how-to-enable-copycutpaste-edit-menu-command?forum=vsx&prof=required



在ToolWindow中实现接口:IOleCommandTarget

 public class MyToolWindow : ToolWindowPane, IOleCommandTarget


实现逻辑如下:


        int IOleCommandTarget.Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
        {
            if (pguidCmdGroup == VSConstants.GUID_VSStandardCommandSet97)
            {
                switch ((VSConstants.VSStd97CmdID)nCmdID)
                {
                    case VSConstants.VSStd97CmdID.SaveProjectItem:
                        {
                            //MessageBox.Show(String.Format("VS asked us to {0}.", ((VSConstants.VSStd97CmdID)nCmdID)));
                            return VSConstants.S_OK;
                        }
                }
            }
            return (int)Microsoft.VisualStudio.OLE.Interop.Constants.OLECMDERR_E_NOTSUPPORTED;
        }
        int IOleCommandTarget.QueryStatus(ref Guid pguidCmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)
        {
            if (pguidCmdGroup == VSConstants.GUID_VSStandardCommandSet97)
            {
                switch ((VSConstants.VSStd97CmdID)prgCmds[0].cmdID)
                {
                    case VSConstants.VSStd97CmdID.SaveProjectItem:
                        {
                            //If you want more logic you can decide if the commands are enabled and if not just leave out the
                            //OLECMDF_ENABLED flag below.
                            prgCmds[0].cmdf = (uint)(OLECMDF.OLECMDF_SUPPORTED | OLECMDF.OLECMDF_ENABLED);
                            return VSConstants.S_OK;
                        }
                }
            }
            return (int)Microsoft.VisualStudio.OLE.Interop.Constants.OLECMDERR_E_NOTSUPPORTED;
        }

     

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值