Windows Forms (включая Windows Forms для Compact Framwork, который я и использую) имеет функцию AutoScale . Установив для свойства AutoScaleMode
значение AutoScaleMode.Dpi
, ваше приложение, скажем, для 320x200, автоматически масштабируется до большего дисплея, например, устройства VGA.
Это прекрасно работает, но у меня есть несколько самодельных пользовательских элементов управления, которые делают свои собственные вещи OnPaint
, и я бы хотел, чтобы они также масштабировались. К сожалению, я не нашел хорошую документацию или пример того, как это сделать.
В настоящее время я делаю это:
protected SizeF zoom = new SizeF(1.0, 1.0);
protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
base.ScaleControl(factor, specified);
zoom = factor; // remember the zoom factor
}
protected override void OnPaint(PaintEventArgs e)
{
// scale everything by zoom.Width and zoom.Height
...
e.Graphics.DrawImage(...);
...
}
Это работает, но мне интересно, если это "правильный способ" сделать это. Поскольку (согласно ILSpy) ни один из других элементов управления CF не имеет внутреннего поля для хранения коэффициента масштабирования, мне интересно, есть ли более простой или лучший способ сделать это.