Windows 10 操作系统上的 Windows 窗体图形问题

2023-11-22

当我在 Windows 10 中运行任何 Windows 窗体应用程序时,窗口内的图形似乎扭曲:

Bad Image

在设计时这不会发生:

Good Image

有人经历过这个吗?

(请打开图片以便看得更清楚。)


.NET Framework >= 4.7 的更新答案

打开 app.config 并添加以下部分:

<System.Windows.Forms.ApplicationConfigurationSection>
    <add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>

有关更多信息,请参阅:Windows 窗体中的高 DPI 支持.

.NET框架

要解决此问题,您可以使用以下任一选项使应用程序支持 DPI:

  • 申请清单
  • API 调用SetProcessDPIAware, SetProcessDpiAwareness or SetProcessDpiAwarenessContext

重要的提示:建议您设置进程默认DPI 通过应用程序清单(而不是 API 调用)进行感知。

使用应用程序清单文件

要使应用程序具有 DPI 感知能力,您可以添加应用清单文件到你的项目。然后在app.manifest文件中,取消注释与 DPI-Awareness 相关的部分:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
 <windowsSettings>
   <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
 </windowsSettings>
</application>

然后在你的应用程序配置文件,添加EnableWindowsFormsHighDpiAutoResizing将其值设置为 true:

<appSettings>
  <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
</appSettings>

有关详细信息,请查看 Microsoft 文档中的以下主题:

  • Windows 上的高 DPI 桌面应用程序开发

SetProcessDPIAwareAPI调用示例

您可以使用SetProcessDPIAware()方法在显示主窗体之前设置应用程序 dpi 感知并防止 Windows 缩放应用程序。另外,您还应该检查 windows 版本是否大于或等于 vista:

static class Program
{
    [DllImport("user32.dll", SetLastError = true)]
    static extern bool SetProcessDPIAware();

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        if (Environment.OSVersion.Version.Major >= 6)
            SetProcessDPIAware();

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(true);
        Application.Run(new Form1());
    }
}

Notes

  1. 正如上面已经提到的,建议您通过应用程序清单而不是 API 调用来设置进程默认 DPI 感知。

  2. 在使用 API 调用之前,请阅读文档以了解支持的操作系统以及 DLL 在初始化期间缓存 dpi 设置时可能出现的竞争条件。另请记住,DLL 应该接受主机进程的 dpi 设置,而不是 API 调用本身。

  3. 你可能会发现这个DpiHelper在 WinForms 中为 .NET Core 3.0 实现的类很有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 10 操作系统上的 Windows 窗体图形问题 的相关文章

  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • IEnumerable 与 IReadOnlyList

    选择有什么区别IEnumerable
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 如何 grep 查找整个单词

    我正在使用以下命令来 grep 子目录中的内容 find xargs grep s s text 然而 这也会发现类似的东西
  • JVM - 堆和栈

    每当加载一个类时 什么存储在堆中 什么存储在堆栈中 另外线程驻留在哪里 引用类型位于堆中 任何原始类型数据和对堆上值的引用 方法的参数 局部变量 都在堆栈上 每个线程都有自己的堆栈 应用程序中的所有线程共享相同的堆
  • 在哪里可以找到 Jet 4.0 引擎使用的特定类型 SQL 的文档?

    我认为这与 MS Access 使用的相同 但我认为与 MySQL 和其他人使用的不同 我需要 SQL 语言的这种特定 种类 或 子集 的文档 Here是最新版本的 Access SQL 参考 Access 2010 然而 Remou 的回
  • C# 中空合并赋值运算符的实际用途?

    C 中的空值 C 的一项新功能使我们能够去掉代码中的空值 with 可为空的引用类型 我们鼓励添加
  • python中求最小值和最大值

    我必须要求用户输入一些数字 然后打印大小 总和 平均值 最小值和最大值 我可以得到前三件事 但我被困在最小和最大的一个上 我遇到的问题是我无法使用sort 因为我需要使列表成为整数一 但你不能使用整数列表split 这是我的代码 numbe
  • 有没有更好的方法在 bash 中运行命令 N 次?

    我偶尔会运行这样的 bash 命令行 n 0 while n lt 10 do some command n n 1 done To run some command连续多次 在本例中为 10 次 Often some command实际上
  • “错误:找不到符号 HashMap”[重复]

    这个问题在这里已经有答案了 尝试创建 或者更确切地说学习 a HashMap以下方式 public class Demo public static void main String args System out println Star
  •  编码问题

    我正在使用 PHP 开发一个网站 这些奇怪的字符 出现在我的页面上 就在它的顶部 我的代码是这样的 但是当我在浏览器中查看源代码时 它显示
  • 实体框架失去 Sql DateTime 精度

    我正在使用 Entity SQL 查询我的 EDM 但我的 DateTime 值失去了毫秒精度 例如 2011 7 20 12 55 15 333 PM 更改为 2011 7 20 12 55 15 000 PM 我已经确认在 SQL 中毫
  • 按子数组键值对多维数组进行排序

    为此发布了类似的问题和答案 但没有一个与我的数组的结构完全匹配 所以如果我错过了一些东西 我深表歉意 这是由 WordPress wpdb 类生成的数组 Array 0 gt Array meta id gt 37850 post id g
  • 如何在纯SQL中编写空安全比较“<=>”?

    在Mysql中有一个比较运算符是空安全的 我在 Java 程序中创建准备好的语句时使用它 如下所示 String routerAddress getSomeValue String sql SELECT FROM ROUTERS WHERE
  • 正则表达式匹配字母字符[重复]

    这个问题在这里已经有答案了 我有这个正则表达式 if cadena matches a zA Z return true 它接受从 A 到 Z 的小写和大写 还接受空格 但这仅适用于英语 例如 在加泰罗尼亚语中 我们有 字符 此外 我们还有
  • .NET 3.5 的代码契约搞乱了 VS10 的调试器

    我最近使用代码契约迁移了很多手动前提条件测试和异常抛出 我没有升级到 NET 4 而是使用Microsoft Contracts dll程序集 这样我就可以坚持使用 NET 3 5 更长的时间 这是一个由 NET 3 5 和 NET 4 程
  • 使用 window.find() 匹配所有出现的情况

    例如 如果我有一个如下所示的 HTML 网页 Hello Techies br Techies here 如果我使用搜索 Techies var sel window getSelection sel collapse document b
  • n 行的平均值

    我有一个包含三列的数据框 Id Date and Value并希望按平均值对其进行下采样 取接下来的 20 行 构建平均值Value从这 20 行中提取数据并将其添加到具有相同结构的新数据框中 Date应该是 20 行的第一个值 我尝试了这
  • WPF 中的 MVVM - 如何提醒 ViewModel 模型中的更改...还是应该?

    我正在阅读一些 MVVM 文章 主要是this and this 我的具体问题是 如何将模型更改从模型传递到视图模型 在乔什的文章中 我没有看到他这样做 ViewModel 总是向 Model 询问属性 在 Rachel 的例子中 她确实有
  • 使用单独的委托/数据源时的 UITableView 问题

    一般说明 首先 我有一个UITableView它已被放置到使用 Interface Builder 的 Xcode 生成的视图上 视图的文件所有者设置为 Xcode 生成的子类UIViewController 对于这个子类 我添加了以下工作
  • 如何在 Magento 2 中安装语言包?

    我尝试按照以下说明进行操作https mage2 pro t topic 270 and http devdocs magento com guides v2 0 config guide cli config cli subcommand
  • 放大动画

    我在用RotateAnimation对于图像 但我也想用动画放大图像 意味着当我的图像旋转时图像也 会缩放 如何使用旋转动画进行缩放 在 anim xml 中 您可以像这样使用比例
  • Windows 10 操作系统上的 Windows 窗体图形问题

    当我在 Windows 10 中运行任何 Windows 窗体应用程序时 窗口内的图形似乎扭曲 在设计时这不会发生 有人经历过这个吗 请打开图片以便看得更清楚 NET Framework gt 4 7 的更新答案 打开 app config