Ejemplo n.º 1
0
        private void InitialiseThumbnail(IntPtr source)
        {
            if (IntPtr.Zero != thumb)
            {
                // release the old thumbnail
                ReleaseThumbnail();
            }

            if (IntPtr.Zero != source)
            {
                // find our parent hwnd
                target = (HwndSource)HwndSource.FromVisual(this);

                // if we have one, we can attempt to register the thumbnail
                if (target != null && 0 == DwmRegisterThumbnail(target.Handle, source, out this.thumb))
                {
                    ThumbnailProperties props = new ThumbnailProperties();
                    props.Visible = this.Visibility == Visibility.Visible;
                    props.SourceClientAreaOnly = this.ClientAreaOnly;
                    props.Opacity = (byte)(255 * this.Opacity);
                    props.Flags   = ThumbnailFlags.Visible | ThumbnailFlags.SourceClientAreaOnly | ThumbnailFlags.Opacity;
                    DwmUpdateThumbnailProperties(thumb, ref props);
                }
            }
        }
Ejemplo n.º 2
0
    internal bool Create()
    {
        lock (MainForm.Sync)
        {
            //attempt to register this darkages process to a thumbnail, 0 for success
            if (NativeMethods.DwmRegisterThumbnail(MainForm.Handle, Client.MainWindowHandle, out ThumbnailHandle) == 0)
            {
                //create a new thumbnail properties struct and set properties/location/size/etc
                var tProperties = new ThumbnailProperties
                {
                    Visible = true,
                    Flags   = ThumbnailFlags.Visible | ThumbnailFlags.RectDestination | ThumbnailFlags.Opacity |
                              ThumbnailFlags.SourceClientAreaOnly,
                    Opacity        = 255,
                    OnlyClientRect = true
                };

                //now determine the location of the thumbnail
                //first we convert this usercontrol's rect to a screen rect
                var screenRect = RectangleToScreen(DisplayRectangle);
                //clientrect will represent the mainform co-ordinates of this form
                var clientRect = MainForm.RectangleToClient(screenRect);

                tProperties.DestinationRect = new(clientRect.Left, clientRect.Top + 24, clientRect.Left + clientRect.Width,
                                                  clientRect.Top + clientRect.Height);

                //update the thumbnail
                _ = NativeMethods.DwmUpdateThumbnailProperties(ThumbnailHandle, ref tProperties);

                return(true);
            }

            return(false);
        }
    }
Ejemplo n.º 3
0
        public void SetDestinationRect(Rect destinationRect)
        {
            ThumbnailProperties properties = new ThumbnailProperties {
                Flags       = ThumbnailFlags.RectDestination,
                Destination = destinationRect
            };

            DwmUpdateThumbnailProperties(thumbnail, ref properties);
        }
Ejemplo n.º 4
0
        public void SetSourceRect(Rect sourceRect)
        {
            ThumbnailProperties properties = new ThumbnailProperties {
                Flags  = ThumbnailFlags.RectSource,
                Source = sourceRect
            };

            DwmUpdateThumbnailProperties(thumbnail, ref properties);
        }
Ejemplo n.º 5
0
 private void UpdateThumbnail()
 {
     if (IntPtr.Zero != thumb)
     {
         ThumbnailProperties props = new ThumbnailProperties
         {
             Visible = this.Visibility == Visibility.Visible,
             SourceClientAreaOnly = this.ClientAreaOnly,
             Opacity = (byte)(255 * this.Opacity),
             Flags   = ThumbnailFlags.Visible | ThumbnailFlags.SourceClientAreaOnly | ThumbnailFlags.Opacity
         };
         DwmUpdateThumbnailProperties(thumb, ref props);
     }
 }
Ejemplo n.º 6
0
    internal void Destroy()
    {
        lock (MainForm.Sync)
        {
            //set thumbnail to invisible incase its not dead yet
            var tProps = new ThumbnailProperties
            {
                Visible = false,
                Flags   = ThumbnailFlags.Visible
            };

            //unregister the thumbnail
            _ = NativeMethods.DwmUnregisterThumbnail(ThumbnailHandle);
            _ = NativeMethods.DwmUpdateThumbnailProperties(ThumbnailHandle, ref tProps);

            Hide();
            MainForm = null !;
            Client   = null !;
        }
    }
Ejemplo n.º 7
0
 internal static extern int DwmUpdateThumbnailProperties(IntPtr hThumbnailId, ref ThumbnailProperties thumbProps);
Ejemplo n.º 8
0
 protected static extern void DwmUpdateThumbnailProperties(IntPtr thumbnailHandle, ref ThumbnailProperties properties);
 public static extern int DwmUpdateThumbnailProperties(IntPtr HThumbnail, ref ThumbnailProperties props);
Ejemplo n.º 10
0
Archivo: DWM.cs Proyecto: Hemlock/Pix
 public static extern int UpdateThumbnailProperties(IntPtr HThumbnail, ref ThumbnailProperties props);
Ejemplo n.º 11
0
 public static extern void DwmUpdateThumbnailProperties( IntPtr thumbnailHandle, ref ThumbnailProperties properties );
Ejemplo n.º 12
0
        // this is where the magic happens
        private void Thumbnail_LayoutUpdated(object sender, EventArgs e)
        {
            if (IntPtr.Zero == thumb)
            {
                InitialiseThumbnail(this.Source);
            }

            if (IntPtr.Zero != thumb)
            {
                if (!target.RootVisual.IsAncestorOf(this))
                {
                    //we are no longer in the visual tree
                    ReleaseThumbnail();
                    return;
                }

                DwmQueryThumbnailSourceSize(this.thumb, out WPF.SysSize size);

                Rect visib = WPF.GetVisibleArea(this);

                ThumbnailProperties props = new ThumbnailProperties();

                if (visib == Rect.Empty)
                {
                    props.Visible = false;
                    props.Flags   = ThumbnailFlags.Visible;
                }
                else
                {
                    double ratioSrc  = (double)size.Width / (double)size.Height;
                    double ratioDest = visib.Width / visib.Height;

                    // Center the thumbnail in the visible area
                    double newSize;
                    if (ratioSrc > ratioDest)
                    {
                        newSize      = visib.Height * ratioDest / ratioSrc;
                        visib.Y     += (visib.Height - newSize) / 2.0;
                        visib.Height = newSize;
                    }
                    else
                    {
                        newSize     = visib.Width * ratioSrc / ratioDest;
                        visib.X    += (visib.Width - newSize) / 2.0;
                        visib.Width = newSize;
                    }

                    // Translate to screen pixels
                    Point a = target.RootVisual.PointToScreen(visib.TopLeft);
                    Point b = target.RootVisual.PointToScreen(visib.BottomRight);
                    Point w = Application.Current.MainWindow.PointToScreen(new Point(0, 0));

                    props.Destination = new WPF.SysRect(
                        (int)Math.Ceiling(a.X - w.X), (int)Math.Ceiling(a.Y - w.Y),
                        (int)Math.Ceiling(b.X - w.X), (int)Math.Ceiling(b.Y - w.Y));

                    props.Visible = this.Visibility == Visibility.Visible;
                    props.Flags   = ThumbnailFlags.Visible | ThumbnailFlags.RectDestination;
                }


                DwmUpdateThumbnailProperties(thumb, ref props);
            }
        }
Ejemplo n.º 13
0
 internal static extern int DwmUpdateThumbnailProperties(IntPtr hThumbnailId, ref ThumbnailProperties thumbProps);
Ejemplo n.º 14
0
 internal static extern int DwmUpdateThumbnailProperties(IntPtr HThumbnail, ref ThumbnailProperties props);
Ejemplo n.º 15
0
 private static extern int DwmUpdateThumbnailProperties(IntPtr thumb, ref ThumbnailProperties props);