From 45eed49ab93119a73572f4d1d82d91fa51920b2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=A7=E6=AF=92=E7=9A=84KCN?= Date: Sun, 23 Jun 2024 02:33:21 +0800 Subject: [PATCH] Enable High DPI support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GCT的高DPI支持 --- .../GrasscutterTools/GrasscutterTools.csproj | 1 + Source/GrasscutterTools/Program.cs | 6 ++++ Source/GrasscutterTools/Utils/HighDPIUtil.cs | 32 +++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 Source/GrasscutterTools/Utils/HighDPIUtil.cs diff --git a/Source/GrasscutterTools/GrasscutterTools.csproj b/Source/GrasscutterTools/GrasscutterTools.csproj index f1a6b02..9951b4f 100644 --- a/Source/GrasscutterTools/GrasscutterTools.csproj +++ b/Source/GrasscutterTools/GrasscutterTools.csproj @@ -352,6 +352,7 @@ + diff --git a/Source/GrasscutterTools/Program.cs b/Source/GrasscutterTools/Program.cs index 06a487e..834cbb1 100644 --- a/Source/GrasscutterTools/Program.cs +++ b/Source/GrasscutterTools/Program.cs @@ -71,6 +71,12 @@ namespace GrasscutterTools if (result != -1) return result; + // 开启高DPI支持 + if (Environment.OSVersion.Version.Major >= 6) // 至少需要Vista系统 + { + HighDPIUtil.SetDpiAwareness(); + } + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); diff --git a/Source/GrasscutterTools/Utils/HighDPIUtil.cs b/Source/GrasscutterTools/Utils/HighDPIUtil.cs new file mode 100644 index 0000000..4563dd9 --- /dev/null +++ b/Source/GrasscutterTools/Utils/HighDPIUtil.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace GrasscutterTools.Utils +{ + internal class HighDPIUtil + { + public static void SetDpiAwareness() + { + var dpiAwareness = ProcessDpiAwareness.PerMonitorDpiAware; + var hresult = SetProcessDpiAwareness(dpiAwareness); + if (hresult != 0) + { + throw new System.ComponentModel.Win32Exception(hresult); + } + } + + [DllImport("shcore.dll")] + private static extern int SetProcessDpiAwareness(ProcessDpiAwareness value); + + private enum ProcessDpiAwareness + { + DpiUnaware = 0, + SystemDpiAware = 1, + PerMonitorDpiAware = 2 + } + } +}