Я пытаюсь установить все флажки в моем приложении C # Winform, чтобы игнорировать настройку DPI пользователя, когда она превышает 100%.т.е. я хочу, чтобы размер флажка оставался небольшим, как если бы он был на 100% шкале шрифта, даже когда пользователь увеличил настройку DPI.
При использовании флажков FlatStyle.Flat размер флажков в различных DPIнастройки:
- 100% (96 DPI): 11 пикселей x 11 пикселей (включая границу)
- 125% (120 DPI): 13 x 13
- 150% (144 DPI): 16 x 16
Я сделал следующее, но размер моих флажков все еще увеличивается:
- AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
- установить для всех шрифтов использование GraphicsUnit.Pixel
Итак, есть ли способ, чтобы мой флажок оставался 11 пикселей на 11 пикселей независимо от настройки DPI?
Если это невозможно, я также попытался переопределить OnPaint на своем пользовательском флажке, чтобы закрасить флажок без рисования поверх текста.Но это оказывается сложным, поскольку начальная (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, чтобы я нарисовал красный флажок, пожалуйста (чтобы я мог закраситьоригинальная коробка).
Спасибо:)