/// <summary> /// The window proc. /// </summary> /// <param name="hwnd"> /// The hwnd. /// </param> /// <param name="umsg"> /// The umsg. /// </param> /// <param name="wParam"> /// The w param. /// </param> /// <param name="lParam"> /// The l param. /// </param> /// <returns> /// The <see cref="IntPtr"/>. /// </returns> private IntPtr WindowProc(IntPtr hwnd, uint umsg, IntPtr wParam, IntPtr lParam) { var msg = (WM)umsg; switch (msg) { case WM.ACTIVATE: { if (_hostConfig.HostPlacement.Frameless) { var frameSizeY = User32Methods.GetSystemMetrics(SystemMetrics.SM_CYFRAME); var frameSizeX = User32Methods.GetSystemMetrics(SystemMetrics.SM_CXFRAME); var frameMargins = new Margins(frameSizeX, frameSizeX, frameSizeY, frameSizeY); DwmApiMethods.DwmExtendFrameIntoClientArea(Handle, ref frameMargins); User32Methods.SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, WindowPositionFlags.SWP_NOZORDER | WindowPositionFlags.SWP_NOOWNERZORDER | WindowPositionFlags.SWP_NOMOVE | WindowPositionFlags.SWP_NOSIZE | WindowPositionFlags.SWP_FRAMECHANGED); } break; } case WM.CREATE: { Handle = hwnd; var size = GetClientSize(); OnCreate(hwnd, size.Width, size.Height); break; } case WM.ERASEBKGND: return(new IntPtr(1)); case WM.SIZE: { var size = GetClientSize(); OnSize(size.Width, size.Height); break; } case WM.CLOSE: { OnExit(); Exit(); Environment.Exit(0); break; } case WM.NCHITTEST: if (_hostConfig.HostPlacement.Frameless) { return((IntPtr)NativeMethods.HT_CAPTION); } break; } return(User32Methods.DefWindowProc(hwnd, umsg, wParam, lParam)); }
void UpdateGeom( ) { var hwnd = ThreadWindowHandles.FindWindow( "Shell_TrayWnd" , null ); RECT rect = new RECT(); if ( User32Methods.IsWindowVisible( hwnd ) ) { ThreadWindowHandles.SystemParametersInfoGet( ( uint )SystemParametersDesktopInfo.SPI_GETWORKAREA , 0 , ref rect , ( uint )SystemParamtersInfoFlags.None ); ScreenGeom = rect; } else { int sx = User32Methods.GetSystemMetrics( SystemMetrics.SM_XVIRTUALSCREEN ); int sy = User32Methods.GetSystemMetrics( SystemMetrics.SM_YVIRTUALSCREEN ); int sw = User32Methods.GetSystemMetrics( SystemMetrics.SM_CXVIRTUALSCREEN ); int sh = User32Methods.GetSystemMetrics( SystemMetrics.SM_CYVIRTUALSCREEN ); ScreenGeom = new RECT( sx , sy , sw , sh ); } // 固定値 BarHeight = 20; int wy = ScreenGeom.Top; int wh = ScreenGeom.Height; BarY = -BarHeight; { if ( TopBar ) { wy = ScreenGeom.Top + BarHeight; BarY = wy - BarHeight; } else { BarY = wy + wh; } wh = ScreenGeom.Height - BarHeight; } // ここ全体 TileWindowManagerに持っていきたい WindowManager.ScreenGeom = ScreenGeom; }