修改多显示器的拾色器显示问题

This commit is contained in:
huangcan
2023-01-29 16:11:54 +08:00
parent ce17e7174e
commit 6fda2ea107

View File

@@ -3,7 +3,6 @@ using GeekDesk.Util;
using HandyControl.Controls; using HandyControl.Controls;
using System; using System;
using System.Reflection; using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Controls.Primitives; using System.Windows.Controls.Primitives;
@@ -53,19 +52,39 @@ namespace GeekDesk.Control.Windows
this.WindowState = WindowState.Normal;//还原窗口(非最小化和最大化) this.WindowState = WindowState.Normal;//还原窗口(非最小化和最大化)
this.Width = SystemParameters.VirtualScreenWidth; var screens = Screen.AllScreens;
this.Height = SystemParameters.VirtualScreenHeight; int allWidth = 0;
int allHeight = 0;
int x = 0;
int y = 0;
this.Left = SystemParameters.VirtualScreenLeft; //获取缩放比例
this.Top = SystemParameters.VirtualScreenTop; double scale = ScreenUtil.GetScreenScalingFactor();
foreach (var screen in screens)
{
var rect = screen.Bounds;
allWidth += rect.Width;
allHeight += rect.Height;
x = Math.Min(x, rect.X);
y = Math.Min(y, rect.Y);
}
//如果主显示器是最左边和最上边,则显示主显示器的缩放比例,反之则缩放比例不添加缩放比例
if (Screen.PrimaryScreen.Bounds.X != x || Screen.PrimaryScreen.Bounds.Y != y)
{
scale = 1;
}
this.Width = allWidth;
this.Height = allHeight;
this.Left = x;
this.Top = y;
DesktopBG.Width = this.Width; DesktopBG.Width = this.Width;
DesktopBG.Height = this.Height; DesktopBG.Height = this.Height;
this.Topmost = true; this.Topmost = true;
//获取缩放比例
double scale = ScreenUtil.GetScreenScalingFactor();
bgBitmap = new System.Drawing.Bitmap( bgBitmap = new System.Drawing.Bitmap(
(int)(Width * scale), (int)(Width * scale),
(int)(Height * scale), (int)(Height * scale),
@@ -75,8 +94,8 @@ namespace GeekDesk.Control.Windows
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bgBitmap)) using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bgBitmap))
{ {
g.CopyFromScreen( g.CopyFromScreen(
0, (int)this.Left,
0, (int)this.Top,
0, 0,
0, 0,
bgBitmap.Size bgBitmap.Size
@@ -88,7 +107,6 @@ namespace GeekDesk.Control.Windows
Int32Rect.Empty, Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions() BitmapSizeOptions.FromEmptyOptions()
); );
DesktopBG.Source = bs; DesktopBG.Source = bs;
VisualBrush b = (VisualBrush)PixelBG.Fill; VisualBrush b = (VisualBrush)PixelBG.Fill;
b.Visual = DesktopBG; b.Visual = DesktopBG;