VB   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了.net – WinForms 4K和1080p缩放/高DPI?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以,这是一个场景:我试图使我的所有表格( Winforms)在4K和1080p中看起来都很好,也称为高DPI或“dpi-aware”.我(为了这个问题的目的)有三种形式:frmCompanymasterEdit,它继承自frmBaseEdit,它继承自frmBase,后者继承System. Windows.Forms.Form.

我已经尝试了旧的方法,通过在清单中使我的应用程序DPI感知:

<application xmlns="urn:scheR_914_11845@as-microsoft-com:asm.v3">
    <windowsSetTings>
      <dpiAware xmlns="http://scheR_914_11845@as.microsoft.com/SMI/2005/WindowsSetTings">true</dpiAware>
    </windowsSetTings>
  </application>

这样,除了我可以解决的小锚定问题之外,表格在4K看起来很完美,看起来就像那样但在1080p中有点模糊.这是4K:4K both old and new ways.

无论如何,所以我抓住它并尝试.NET 4.7中描述的新方法,针对4.7框架并添加以下代码:

到app.config

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

到app.manifest

<!-- Windows 10 compatibility -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

并且还从app.manifest中取出旧代码,以便不覆盖新的.NET 4.7方式.我确保将代码放在适当的位置.
所以这里的形式在4K中看起来像上面的图像,但现在在1080p中它被放大了如下所示:
1080p new way

无论哪种方式,除了较小的锚定问题之外,表格在4k中看起来很棒,并且它(旧方式)是正确的尺寸但在1080p中有点模糊或者在1080p中不模糊但是真的放大了.
还必须在所有designer.vb文件中更改这两行,如下所示:

@H_842_3@me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!,96.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi

我不知道为什么我不能让它在1080p中看起来合适.就像我说的,我的目标是4.7 .NET框架.我正在使用适当版本的Windows 10(版本1709 / Creator版). 1080p缩放为100%.此外,我们没有资源升级到WPF.

我已成功为我的两个Winforms应用程序添加了DPI支持,这些应用程序分别面向.NET 4.5和4.7.

在过去,我尝试通过清单文件添加支持,但没有运气.幸运的是,我找到了以下解决方案:

using System;
using System.Runtime.Interopservices;
using System.Windows.Forms;

namespace WinformsApp
{
    static class Program
    {
        [DllImport("Shcore.dll")]
        static extern int SetProcessDpiAwareness(int PROCESS_DPI_AWAREnesS);

        // According to https://msdn.microsoft.com/en-us/library/windows/desktop/dn280512(v=vs.85).aspx
        private enum DpiAwareness
        {
            None = 0,SystemAware = 1,PerMonitorAware = 2
        }

        /// <sumMary>
        /// The main entry point for the application.
        /// </sumMary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            SetProcessDpiAwareness((int)DpiAwareness.PerMonitorAwarE);

            Application.Run(new MainForm());
        }
    }
}

上面的代码是您的Program.cs文件应该是什么样子.当然,你必须将它移植到VB,但它应该很容易做到.

这在Windows 10中完美运行,无需任何其他修改.

在两个Winforms应用程序之一中,我使用像素坐标通过Graphics类渲染字符串,这导致我的字符串被偏移.修复非常简单:

private void DrawString(Graphics g,String text,int x,int y)
{
    using (var font = new Font("Arial",12))
    using (var brush = new SolidBrush(Color.WhitE))
        g.DrawString(text,font,brush,LogicalToDeviceUnits(X),LogicalToDeviceUnits(y));
}

基本上,我必须@R_607_10499@ntrol.LogicalToDeviceUnits(int value)来获得要缩放的像素坐标.

除此之外,我根本不需要触摸我的代码.

大佬总结

以上是大佬教程为你收集整理的.net – WinForms 4K和1080p缩放/高DPI?全部内容,希望文章能够帮你解决.net – WinForms 4K和1080p缩放/高DPI?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。