public static WinForms.Panel create_WinForms_Window(this string title, VSFRAMEMODE frameMode) { var visualStudio = new VisualStudio_2010(); var _panel = visualStudio.invokeOnThread( () => { var type = typeof(O2.FluentSharp.VisualStudio.WindowPane_WinForms); var window = (ToolWindowPane)visualStudio.package().invoke("CreateToolWindow", type, 64000.random()); window.Caption = title; IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame; //if(floating) // windowFrame.SetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, VSFRAMEMODE.VSFM_Float); windowFrame.SetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, frameMode); windowFrame.Show(); var content = (Control_WinForms)window.Content; var windowsFormHost = (System.Windows.Forms.Integration.WindowsFormsHost)content.Content; var panel = new WinForms.Panel(); panel.backColor("Control"); windowsFormHost.Child = panel; return(panel); }); return(_panel); }
// Hides the tool window, except when docked. public void HideToolWindow() { if (null != Frame) { IVsWindowFrame parentWindowFrame = (IVsWindowFrame)Frame; object frameMode; parentWindowFrame.GetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, out frameMode); VSFRAMEMODE frameModeEnum = (VSFRAMEMODE)frameMode; if (frameModeEnum == VSFRAMEMODE.VSFM_Float || frameModeEnum == VSFRAMEMODE.VSFM_FloatOnly) { parentWindowFrame.Hide(); } } }
private void HandlePossibleFrameModeChange() { object frameModeObj; VSFRAMEMODE frameMode; if (VSConstants.S_OK == myFrame.GetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, out frameModeObj) && myLastFrameMode != (frameMode = (VSFRAMEMODE)frameModeObj)) { myLastFrameMode = frameMode; FrameVisibilityFlags flags = myFrameVisibility; if ((flags & FrameVisibilityFlags.FrameVisibilityMask) == FrameVisibilityFlags.Covered && 0 != (flags & FrameVisibilityFlags.HasBeenVisible)) { OnShow((int)__FRAMESHOW.FRAMESHOW_WinShown); } } }
private static FrameMode FromVsframemode(VSFRAMEMODE frameMode) { switch (frameMode) { case VSFRAMEMODE.VSFM_Dock: return(FrameMode.Docked); case VSFRAMEMODE.VSFM_Float: case VSFRAMEMODE.VSFM_FloatOnly: return(FrameMode.Floating); case VSFRAMEMODE.VSFM_MdiChild: return(FrameMode.MdiChild); default: return(FrameMode.Unknown); } }
/// <summary> /// Create a new <see cref="T:ToolWindowActivationHelper"/> /// </summary> /// <param name="unfilteredServiceProvider">An <see cref="IServiceProvider"/> that is not filtered by /// the containing toolwindow implementation.</param> /// <param name="frame">The <see cref="IVsWindowFrame"/> to provide notifications for</param> /// <param name="coveredFrameActions">The default <see cref="CoveredFrameContentActions"/></param> /// <param name="notifyCallback">Thee <see cref="T:INotifyToolWindowActivation"/> callback used to communicate /// with the consuming class</param> public ToolWindowActivationHelper(IServiceProvider unfilteredServiceProvider, IVsWindowFrame frame, CoveredFrameContentActions coveredFrameActions, INotifyToolWindowActivation <DocDataType, DocViewType, SelectionContainerType> notifyCallback) { if (unfilteredServiceProvider == null) { throw new ArgumentNullException("unfilteredServiceProvider"); } if (frame == null) { throw new ArgumentNullException("frame"); } if (notifyCallback == null) { throw new ArgumentNullException("notifyCallback"); } myLastFrameMode = (VSFRAMEMODE)(-1); myMonitorSelectionService = (IMonitorSelectionService)unfilteredServiceProvider.GetService(typeof(IMonitorSelectionService)); myFrame = frame; myCoveredFrameActions = coveredFrameActions; myNotifyCallback = notifyCallback; frame.SetProperty((int)__VSFPROPID.VSFPROPID_ViewHelper, this); }
/// <summary> /// Implements <see cref="IVsWindowFrameNotify3.OnShow"/> /// </summary> protected int OnShow(int fShow) { FrameVisibilityFlags flags = myFrameVisibility; FrameVisibilityFlags startFlags = flags & ~(FrameVisibilityFlags.FrameVisibilityMask | FrameVisibilityFlags.PersistentFlagsMask); myFrameVisibility &= FrameVisibilityFlags.FrameVisibilityMask | FrameVisibilityFlags.PersistentFlagsMask; switch ((__FRAMESHOW)fShow) { case (__FRAMESHOW)__FRAMESHOW2.FRAMESHOW_BeforeWinHidden: myFrameVisibility |= FrameVisibilityFlags.PendingHiddenMeansClosed; break; case __FRAMESHOW.FRAMESHOW_WinMinimized: case __FRAMESHOW.FRAMESHOW_TabDeactivated: // VS2010 is sending a BeforeWinHidden/TabDeactivated/Hidden, which results in a covered state // with a closed window. If closed is already pending, don't degrade to cover pending instead. myFrameVisibility |= 0 != (startFlags & FrameVisibilityFlags.PendingHiddenMeansClosed) ? FrameVisibilityFlags.PendingHiddenMeansClosed : FrameVisibilityFlags.PendingHiddenMeansCovered; break; case __FRAMESHOW.FRAMESHOW_DestroyMultInst: case __FRAMESHOW.FRAMESHOW_WinClosed: ClearContents(); break; case __FRAMESHOW.FRAMESHOW_WinHidden: bool cover = false; object frameModeObj; VSFRAMEMODE frameMode = (VSFRAMEMODE)(-1); IVsWindowFrame frame = myFrame; if (frame != null && VSConstants.S_OK == frame.GetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, out frameModeObj)) { // VS is changing the framemode during a hide request without telling us, always check and reset // at this point so that a move on a hidden window does not reshow it. myLastFrameMode = frameMode = (VSFRAMEMODE)frameModeObj; } if (0 != (startFlags & FrameVisibilityFlags.PendingHiddenMeansCovered)) { cover = true; } else if (0 == (startFlags & FrameVisibilityFlags.PendingHiddenMeansClosed)) { cover = frameMode == VSFRAMEMODE.VSFM_MdiChild; } if (cover) { myFrameVisibility = FrameVisibilityFlags.Covered | (flags & FrameVisibilityFlags.PersistentFlagsMask); } else { ClearContents(); } break; case __FRAMESHOW.FRAMESHOW_AutoHideSlideBegin: case __FRAMESHOW.FRAMESHOW_WinMaximized: case __FRAMESHOW.FRAMESHOW_WinRestored: case __FRAMESHOW.FRAMESHOW_WinShown: ShowContents(); break; } return(VSConstants.S_OK); }