- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 WinForms 应用程序,它在较旧的系统上运行良好,但我无法让它在 4k 显示器上看起来很好。有多个问题,并且有很多关于该主题的文章,但这个问题集中在一个特定问题上。我可以设置不同的控件以使用相同的字体,但在高 DPI 系统上,控件看起来会有很大不同。我怎样才能解决这个问题?
显然我可以更改字体大小、移动控件等。但是 Windows 正在为我的字体大小添加一个神秘因素。在不知道 Windows 正在做什么的情况下,我很难撤消它!
在旧系统上,我的测试窗口看起来很完美:
在高 DPI 系统上,某些控件的字体大小与其他控件不同:
我尝试了几件事,包括在某些控件上手动设置字体而不是从表单继承。如您所见,更改字体并没有解决问题:
在互联网上搜索后,我尝试了几种方法来解决这个问题,包括:
private void newFormButton_Click(object sender, EventArgs e)
{
Font copyOfFont = new Font(Font, FontStyle.Strikeout);
Form form = new Form();
form.Font = Font;
string sample = "Abc 123 :)";
int padding = 6;
Label label = new Label();
label.Text = sample;
label.Top = padding;
label.Left = padding;
label.Font = copyOfFont;
label.Parent = form;
Button button = new Button();
button.Text = sample;
button.Top = label.Bottom + padding;
button.Left = padding;
button.Width = label.Width + padding * 2;
button.Height = label.Height + padding * 2;
button.Parent = form;
TextBox textBox = new TextBox();
textBox.Text = sample;
textBox.Size = button.Size;
textBox.Top = button.Bottom + padding;
textBox.Left = padding;
textBox.Parent = form;
ListBox listBox = new ListBox();
listBox.Items.Add(sample);
listBox.Items.Add(sample);
listBox.Width = button.Width;
listBox.Height = button.Height * 2;
listBox.Top = textBox.Bottom + padding;
listBox.Left = padding;
listBox.Font = copyOfFont;
listBox.Parent = form;
form.Show();
}
最佳答案
这很疯狂,但它有效。
我在互联网上看到的关于 DPI 虚拟化的所有内容都说默认情况下 Windows 会自动将进程设置为 PROCESS_DPI_UNAWARE。因此,除非您明确选择其他两个设置之一,否则您的应用程序在高分辨率显示器上应该看起来不错。它可能有点模糊,但它看起来不应该像我上面展示的例子那么糟糕。
显然是不是 真的。默认取决于计算机,也取决于日期。我的解决方案:明确 将应用程序设置为使用 PROCESS_DPI_UNAWARE。我在下面包含了一个代码示例。
请注意,您应该能够使用 list 处理此问题。一些消息来源说这是首选方式,而不是使用 C# 代码。我们的结果喜忧参半。 C# 代码选项似乎更可靠。
[DllImport("shcore.dll")]
static extern int SetProcessDpiAwareness(_Process_DPI_Awareness value);
enum _Process_DPI_Awareness
{
Process_DPI_Unaware = 0,
Process_System_DPI_Aware = 1,
Process_Per_Monitor_DPI_Aware = 2
}
public MainForm()
{
//int result = SetProcessDpiAwareness(_Process_DPI_Awareness.Process_System_DPI_Aware);
//int result = SetProcessDpiAwareness(_Process_DPI_Awareness.Process_Per_Monitor_DPI_Aware);
int result = SetProcessDpiAwareness(_Process_DPI_Awareness.Process_DPI_Unaware);
System.Diagnostics.Debug.Assert(result == 0);
关于winforms - 相同的字体在高 DPI 显示器上看起来并不相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40250866/
我正在尝试执行 vagrant up 但一直遇到此错误: ==> default: IOError: [Errno 13] Permission denied: '/usr/local/lib/pyt
我在容器 div 中有一系列动态创建的不同高度的 div。 Varying text... Varying text... Varying text... Varying text.
通过 cygwin 运行 vagrant up 时遇到以下错误。 stderr: /bin/bash: /home/vagrant/.ansible/tmp/ansible-tmp-14872260
今天要向小伙伴们介绍的是一个能够快速地把数据制作成可视化、交互页面的 Python 框架:Streamlit,分分钟让你的数据动起来! 犹记得我在做机器学习和数据分析方面的毕设时,
我是 vagrant 的新手,正在尝试将第二个磁盘添加到我正在用 vagrant 制作的虚拟机中。 我想出了如何在第一次启动虚拟机时连接磁盘,但是当我关闭机器时 然后再次备份(使用 'vagrant
我是一名优秀的程序员,十分优秀!