static void SetPostion(DockPosition edge, Window appbarWindow, bool isAutoHide) { var barData = new Shell32.Appbardata(); barData.cbSize = Marshal.SizeOf(barData); barData.hWnd = new WindowInteropHelper(appbarWindow).Handle; barData.uEdge = (int)edge; if (barData.uEdge == (int)DockPosition.Left || barData.uEdge == (int)DockPosition.Right) { barData.rc.Top = 0; barData.rc.Bottom = (int)SystemParameters.PrimaryScreenHeight; if (barData.uEdge == (int)DockPosition.Left) { barData.rc.Left = 0; barData.rc.Right = (int)Math.Round(appbarWindow.ActualWidth); } else { barData.rc.Right = (int)SystemParameters.PrimaryScreenWidth; barData.rc.Left = barData.rc.Right - (int)Math.Round(appbarWindow.ActualWidth); } } else { barData.rc.Left = 0; barData.rc.Right = (int)SystemParameters.PrimaryScreenWidth; if (barData.uEdge == (int)DockPosition.Top) { barData.rc.Top = 0; barData.rc.Bottom = (int)Math.Round(appbarWindow.ActualHeight); } else { barData.rc.Bottom = (int)SystemParameters.PrimaryScreenHeight; barData.rc.Top = barData.rc.Bottom - (int)Math.Round(appbarWindow.ActualHeight); } } Shell32.SHAppBarMessage((int)Shell32.AppBarMessages.ABM_QUERYPOS, ref barData); if (isAutoHide) { Shell32.SHAppBarMessage((int)Shell32.AppBarMessages.ABM_SETAUTOHIDEBAR, ref barData); } else { Shell32.SHAppBarMessage((int)Shell32.AppBarMessages.ABM_SETPOS, ref barData); } var rect = new Rect(barData.rc.Left, barData.rc.Top, barData.rc.Right - barData.rc.Left, barData.rc.Bottom - barData.rc.Top); appbarWindow.Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new ResizeDelegate(DoResize), appbarWindow, rect); }
public static void DockWindow(Window appbarWindow, DockPosition edge, bool autoHide) { var info = GetRegisterInfo(appbarWindow); info.Edge = edge; info.AutoHide = autoHide; var abd = new Shell32.Appbardata(); abd.cbSize = Marshal.SizeOf(abd); abd.hWnd = new WindowInteropHelper(appbarWindow).Handle; if (edge == DockPosition.None) { if (info.IsRegistered) { Shell32.SHAppBarMessage((int)Shell32.AppBarMessages.ABM_REMOVE, ref abd); info.IsRegistered = false; } RestoreWindow(appbarWindow); return; } if (!info.IsRegistered) { info.IsRegistered = true; info.CallbackId = (int)WUser32.RegisterWindowMessage("AppBarMessage"); abd.uCallbackMessage = info.CallbackId; Shell32.SHAppBarMessage((int)Shell32.AppBarMessages.ABM_NEW, ref abd); Shell32.SHAppBarMessage((int)Shell32.AppBarMessages.ABM_ACTIVATE, ref abd); var source = HwndSource.FromHwnd(abd.hWnd); if (source != null) { source.AddHook(info.WndProc); } } appbarWindow.WindowStyle = WindowStyle.None; appbarWindow.ResizeMode = ResizeMode.NoResize; appbarWindow.Topmost = true; SetPostion(info.Edge, appbarWindow, autoHide); }
public static void DockWindow( Window appbarWindow, DockPosition edge, bool autoHide ) { var info = GetRegisterInfo( appbarWindow ); info.Edge = edge; info.AutoHide = autoHide; var abd = new Shell32.Appbardata(); abd.cbSize = Marshal.SizeOf( abd ); abd.hWnd = new WindowInteropHelper( appbarWindow ).Handle; if ( edge == DockPosition.None ) { if ( info.IsRegistered ) { Shell32.SHAppBarMessage( (int)Shell32.AppBarMessages.ABM_REMOVE, ref abd ); info.IsRegistered = false; } RestoreWindow( appbarWindow ); return; } if ( !info.IsRegistered ) { info.IsRegistered = true; info.CallbackId = (int)WUser32.RegisterWindowMessage( "AppBarMessage" ); abd.uCallbackMessage = info.CallbackId; Shell32.SHAppBarMessage( (int)Shell32.AppBarMessages.ABM_NEW, ref abd ); Shell32.SHAppBarMessage( (int)Shell32.AppBarMessages.ABM_ACTIVATE, ref abd ); var source = HwndSource.FromHwnd( abd.hWnd ); if ( source != null ) source.AddHook( info.WndProc ); } appbarWindow.WindowStyle = WindowStyle.None; appbarWindow.ResizeMode = ResizeMode.NoResize; appbarWindow.Topmost = true; SetPostion( info.Edge, appbarWindow, autoHide ); }
static void SetPostion( DockPosition edge, Window appbarWindow, bool isAutoHide ) { var barData = new Shell32.Appbardata(); barData.cbSize = Marshal.SizeOf( barData ); barData.hWnd = new WindowInteropHelper( appbarWindow ).Handle; barData.uEdge = (int)edge; if ( barData.uEdge == (int)DockPosition.Left || barData.uEdge == (int)DockPosition.Right ) { barData.rc.Top = 0; barData.rc.Bottom = (int)SystemParameters.PrimaryScreenHeight; if ( barData.uEdge == (int)DockPosition.Left ) { barData.rc.Left = 0; barData.rc.Right = (int)Math.Round( appbarWindow.ActualWidth ); } else { barData.rc.Right = (int)SystemParameters.PrimaryScreenWidth; barData.rc.Left = barData.rc.Right - (int)Math.Round( appbarWindow.ActualWidth ); } } else { barData.rc.Left = 0; barData.rc.Right = (int)SystemParameters.PrimaryScreenWidth; if ( barData.uEdge == (int)DockPosition.Top ) { barData.rc.Top = 0; barData.rc.Bottom = (int)Math.Round( appbarWindow.ActualHeight ); } else { barData.rc.Bottom = (int)SystemParameters.PrimaryScreenHeight; barData.rc.Top = barData.rc.Bottom - (int)Math.Round( appbarWindow.ActualHeight ); } } Shell32.SHAppBarMessage( (int)Shell32.AppBarMessages.ABM_QUERYPOS, ref barData ); if ( isAutoHide ) Shell32.SHAppBarMessage( (int)Shell32.AppBarMessages.ABM_SETAUTOHIDEBAR, ref barData ); else Shell32.SHAppBarMessage( (int)Shell32.AppBarMessages.ABM_SETPOS, ref barData ); var rect = new Rect( barData.rc.Left, barData.rc.Top, barData.rc.Right - barData.rc.Left, barData.rc.Bottom - barData.rc.Top ); appbarWindow.Dispatcher.BeginInvoke( DispatcherPriority.ApplicationIdle, new ResizeDelegate( DoResize ), appbarWindow, rect ); }