文章来源:
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;
}
}
}
{
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;
}
}