private void AddWindow(WindowContainer win, Win32.WinDocPos windowDockLocation) { int index; if ((index = window.IndexOf(win)) == -1) { if (!Properties.Settings.Default.TabSwitchVisible) { win.setTabSwitchVisible(false); } window.Add(win); } else { switch (windowDockLocation) { case Win32.WinDocPos.main: window[index].offset = win.offset; // reset offset if tried to add again break; case Win32.WinDocPos.TopLeft: case Win32.WinDocPos.Top: case Win32.WinDocPos.TopRight: case Win32.WinDocPos.Right: case Win32.WinDocPos.BottomRight: case Win32.WinDocPos.Bottom: case Win32.WinDocPos.BottomLeft: case Win32.WinDocPos.Left: window[index].setWindow(windowDockLocation); break; } } }
public void setWindow(Win32.WinDocPos windowDockLocation = Win32.WinDocPos.main) { Win32.Rect main = new Win32.Rect(); Win32.GetWindowRect(mainWindowHandle, ref main); childWindowRect.Left = main.Left; childWindowRect.Top = main.Top; if (windowDockLocation != Win32.WinDocPos.main) { // these windows require sizing int WTop = childWindowRect.Top; int WLeft = childWindowRect.Left; int WWidth = 1000; int WHeight = 1000; switch (windowDockLocation) // set size { case Win32.WinDocPos.TopLeft: case Win32.WinDocPos.TopRight: case Win32.WinDocPos.BottomLeft: case Win32.WinDocPos.BottomRight: WWidth = main.Width / 2; WHeight = main.Height / 2; break; case Win32.WinDocPos.Top: case Win32.WinDocPos.Bottom: WWidth = main.Width; WHeight = main.Height / 2; break; case Win32.WinDocPos.Right: case Win32.WinDocPos.Left: WWidth = main.Width / 2; WHeight = main.Height; break; } switch (windowDockLocation) { case Win32.WinDocPos.TopLeft: case Win32.WinDocPos.Left: case Win32.WinDocPos.Top: // Already in pos break; case Win32.WinDocPos.Bottom: case Win32.WinDocPos.BottomLeft: WTop += main.Height / 2; break; case Win32.WinDocPos.TopRight: case Win32.WinDocPos.Right: WLeft += main.Width / 2; break; case Win32.WinDocPos.BottomRight: WTop += main.Height / 2; WLeft += main.Width / 2; break; } // Update childWindowRect.Top = WTop; childWindowRect.Left = WLeft; offset.X = 0; offset.Y = 0; Thread.Sleep(100); Win32.SetWindowPos( childWindowHandle, Win32.HWND_TOPMOST, WLeft, WTop, WWidth, WHeight, Win32.SWP_SHOWWINDOW | Win32.SWP_NOACTIVATE); } else { Win32.SetWindowPos( childWindowHandle, Win32.HWND_TOPMOST, (int)(childWindowRect.Left + offset.X), (int)(childWindowRect.Top + offset.Y), 0, 0, Win32.SWP_SHOWWINDOW | Win32.SWP_NOSIZE | Win32.SWP_NOACTIVATE); } resetWindow(); }