Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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 );
        }
Esempio n. 4
0
        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 );
        }