调整大小时扭曲标签文本

Distorted label text when resizing

我有一个带有标签的动态 window。 window 是一个 HUD,根据其父级 window 改变大小。但是,其中一个标签在调整大小时会变形。

标签的字体会根据屏幕大小调整大小,如下所示:

float fontSize = this.Width / 128 /getScalingFactor();

缩放因子计算如下:

//Gets the scaling factor of the current dpi settings
        protected float getScalingFactor()
        {
            Graphics g = Graphics.FromHwnd(IntPtr.Zero);
            IntPtr desktop = g.GetHdc();
            int LogicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.VERTRES);
            int PhysicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.DESKTOPVERTRES);
            int logpixelsy = GetDeviceCaps(desktop, (int)DeviceCap.LOGPIXELSY);
            float screenScalingFactor = (float)PhysicalScreenHeight / (float)LogicalScreenHeight;
            float dpiScalingFactor = (float)logpixelsy / (float)96;

            return dpiScalingFactor; // 1.25 = 125%
            //return screenScalingFactor;
        }

以及标签的设计者代码。有些标签也包含数字,并且它们使用相同的设置。但是,它们不会变形,但用户名标签会变形。

this.labelUsername.AutoSize = true;
            this.tableLayoutPanel1.SetColumnSpan(this.labelUsername, 2);
            this.labelUsername.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.labelUsername.ForeColor = System.Drawing.Color.White;
            this.labelUsername.Location = new System.Drawing.Point(3, 0);
            this.labelUsername.Name = "labelUsername";
            this.labelUsername.Size = new System.Drawing.Size(56, 14);
            this.labelUsername.TabIndex = 3;
            this.labelUsername.Text = "Username";
            this.labelUsername.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;

我试过更改一些字体大小和缩放比例。我也尝试过更改设计器代码中的一些设置。不幸的是到目前为止没有成功。

也许有人认识到了这个问题并可以指出导致此问题的原因。我假设可能与标签和 window DPI 不匹配。但这并不能解释为什么数字没有遇到同样的问题。

首先澄清一下。我正在构建一个我不是 100% 熟悉的开源项目。

所以在仔细研究之后,我意识到还有另一个函数也可以控制 HUD 颜色。除非我也在那里为我的标签添加前景色,否则我得到的是看起来扭曲的文字。

我假设每次 window 调整大小时都会调用此方法,并且当我的标签没有更新颜色时,它会变成透明颜色。但是,由于前景色是在启动时设置的,因此它显示为透明文本周围的边框,因为它没有调整大小。