我试图在我的C#Winform应用程序中使所有复选框大于100%时忽略用户的DPI设置。 也就是说,即使用户增加了DPI设置,我也希望复选框的大小保持较小,就好像字体大小为100%一样。
使用FlatStyle.Flat复选框,以显示各种DPI设置中的复选框的大小:
我已完成以下操作,但复选框的大小仍会增加:
那么,有没有办法让我的复选框保持11像素乘11像素而不管DPI设置如何?
如果不可能,我也尝试在自定义复选框上覆盖OnPaint以在复选框上绘制而不在Text上绘制。 但这很复杂,因为渲染框的起始(X,Y)坐标在某种程度上受CheckAlign和RightToLeft属性的影响。
这是代码段。 我打算让红色框在原始复选框上绘制。 绿色框作为我要显示的新复选框。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// We need to override checkbox drawing for large font scaling since it will be drawn bigger than usual.
// ex: At 100% scaling, checkbox size is 11x11. At 125% scaling, checkbox size is 13x13.
if (e.Graphics.DpiX > 96)
{
// What is the x & y co-ords of the checkbox?
int x = 0;
int y = 0;
using (SolidBrush brush = new SolidBrush(Enabled ? Color.White : SystemColors.Control))
{
// Red checkbox is to override the original checkbox drawn
var scaleFactor = e.Graphics.DpiX / 96;
e.Graphics.DrawRectangle(new Pen(Color.Red), x, y, (float)Math.Round(CHECKBOX_WIDTH * scaleFactor) + 1, (float)Math.Round(CHECKBOX_HEIGHT * scaleFactor) + 1);
// Green checkbox is to draw the small checkbox that I want 11x11 (including border)
e.Graphics.FillRectangle(brush, x, y, CHECKBOX_WIDTH, CHECKBOX_HEIGHT);
e.Graphics.DrawRectangle(new Pen(Color.Green), x, y, CHECKBOX_WIDTH + 1, CHECKBOX_HEIGHT + 1); // Draw the outer border
}
}
}
请问有人可以帮助我确定正确的X,Y坐标来绘制红色复选框(以便我可以在原始方框上绘制)。
谢谢:)