From c62b46850c35616c09d9535858d443f4070baa96 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=89=A7=E6=AF=92=E7=9A=84KCN?=
<103011451+JDDKCN@users.noreply.github.com>
Date: Sun, 23 Jun 2024 22:34:03 +0800
Subject: [PATCH] Enable High DPI support (#231)
---
.../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
+ }
+ }
+}