private ShowTabPageContextMenu ( |
||
control | ||
position | Point | |
return | void |
protected override void WndProc(ref Message m) { switch (m.Msg) { case (int)Win32.Msgs.WM_NCLBUTTONDOWN: { if (IsDisposed) { return; } uint result = Win32Helper.IsRunningOnMono ? 0 : NativeMethods.SendMessage(this.Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, (uint)m.LParam); if (result == 2 && DockPanel.AllowEndUserDocking && this.AllowEndUserDocking) // HITTEST_CAPTION { Activate(); m_dockPanel.BeginDrag(this); } else { base.WndProc(ref m); } return; } case (int)Win32.Msgs.WM_NCRBUTTONDOWN: { uint result = Win32Helper.IsRunningOnMono ? 0 : NativeMethods.SendMessage(this.Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, (uint)m.LParam); if (result == 2) // HITTEST_CAPTION { DockPane theOnlyPane = (VisibleNestedPanes.Count == 1) ? VisibleNestedPanes[0] : null; if (theOnlyPane != null && theOnlyPane.ActiveContent != null) { theOnlyPane.ShowTabPageContextMenu(this, PointToClient(Control.MousePosition)); return; } } base.WndProc(ref m); return; } case (int)Win32.Msgs.WM_CLOSE: if (NestedPanes.Count == 0) { base.WndProc(ref m); return; } for (int i = NestedPanes.Count - 1; i >= 0; i--) { DockContentCollection contents = NestedPanes[i].Contents; for (int j = contents.Count - 1; j >= 0; j--) { IDockContent content = contents[j]; if (content.DockHandler.DockState != DockState.Float) { continue; } if (!content.DockHandler.CloseButton) { continue; } if (content.DockHandler.HideOnClose) { content.DockHandler.Hide(); } else { content.DockHandler.Close(); } } } return; case (int)Win32.Msgs.WM_NCLBUTTONDBLCLK: { uint result = !DoubleClickTitleBarToDock || Win32Helper.IsRunningOnMono ? 0 : NativeMethods.SendMessage(this.Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, (uint)m.LParam); if (result != 2) // HITTEST_CAPTION { base.WndProc(ref m); return; } DockPanel.SuspendLayout(true); // Restore to panel foreach (DockPane pane in NestedPanes) { if (pane.DockState != DockState.Float) { continue; } pane.RestoreToPanel(); } DockPanel.ResumeLayout(true, true); return; } case WM_CHECKDISPOSE: if (NestedPanes.Count == 0) { Dispose(); } return; } base.WndProc(ref m); }
protected void ShowTabPageContextMenu(Point position) { DockPane.ShowTabPageContextMenu(this, position); }
protected override void WndProc(ref Message m) { if (m.Msg == (int)Msgs.WM_NCLBUTTONDOWN) { if (this.IsDisposed) { return; } uint result = NativeMethods.SendMessage(this.Handle, (int)Msgs.WM_NCHITTEST, 0, (uint)m.LParam); if (result == 2 && this.DockPanel.AllowEndUserDocking && this.AllowEndUserDocking) // HITTEST_CAPTION { this.Activate(); this.m_dockPanel.BeginDrag(this); } else { base.WndProc(ref m); } return; } else if (m.Msg == (int)Msgs.WM_NCRBUTTONDOWN) { uint result = NativeMethods.SendMessage(this.Handle, (int)Msgs.WM_NCHITTEST, 0, (uint)m.LParam); if (result == 2) // HITTEST_CAPTION { DockPane theOnlyPane = (this.VisibleNestedPanes.Count == 1) ? this.VisibleNestedPanes[0] : null; if (theOnlyPane != null && theOnlyPane.ActiveContent != null) { theOnlyPane.ShowTabPageContextMenu(this, this.PointToClient(MousePosition)); return; } } base.WndProc(ref m); return; } else if (m.Msg == (int)Msgs.WM_CLOSE) { if (this.NestedPanes.Count == 0) { base.WndProc(ref m); return; } for (int i = this.NestedPanes.Count - 1; i >= 0; i--) { DockContentCollection contents = this.NestedPanes[i].Contents; for (int j = contents.Count - 1; j >= 0; j--) { IDockContent content = contents[j]; if (content.DockHandler.DockState != DockState.Float) { continue; } if (!content.DockHandler.CloseButton) { continue; } if (content.DockHandler.HideOnClose) { content.DockHandler.Hide(); } else { content.DockHandler.Close(); } } } return; } else if (m.Msg == (int)Msgs.WM_NCLBUTTONDBLCLK) { uint result = NativeMethods.SendMessage(this.Handle, (int)Msgs.WM_NCHITTEST, 0, (uint)m.LParam); if (result != 2) // HITTEST_CAPTION { base.WndProc(ref m); return; } this.DockPanel.SuspendLayout(true); // Restore to panel foreach (DockPane pane in this.NestedPanes) { if (pane.DockState != DockState.Float) { continue; } pane.RestoreToPanel(); } this.DockPanel.ResumeLayout(true, true); return; } else if (m.Msg == WM_CHECKDISPOSE) { if (this.NestedPanes.Count == 0) { this.Dispose(); } return; } base.WndProc(ref m); }