我有一个带有标签的动态窗口。该窗口是HUD,并根据其父窗口更改大小。但是,调整大小后,其中一个标签会变形。
根据屏幕尺寸调整标签字体,如下所示:
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;
我尝试更改一些字体大小和缩放系数。我也尝试过更改设计器代码中的某些设置。不幸的是到目前为止没有成功。
也许有人意识到了这个问题,可以指出导致问题的原因。我假设标签和窗口DPI可能有些不匹配。但这并不能解释为什么数字没有出现相同的问题。
答案 0 :(得分:0)
首先要澄清。我正在建立一个并非100%熟悉的开源项目。
因此,在仔细研究之后,我意识到还有另一个功能也可以控制HUD颜色。除非我也在那里在标签上添加了原色,否则我会看到扭曲的文字。
我假设每次调整窗口大小时都会调用此方法,并且当我的标签没有在那里的颜色更新时,它变为透明颜色。但是,由于原色是在启动时设置的,因为未调整大小,所以它在透明文本周围显示为边框。