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

来源:互联网 发布:微商小视频制作软件 编辑:程序博客网 时间:2024/04/29 22:15

文章来源:

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;
        }

     

0 0
原创粉丝点击