Windows窗體(包括Windows Forms for Compact Framwork,這是我正在使用的)有一個AutoScale feature。通過將AutoScaleMode
property設置爲AutoScaleMode.Dpi
,您爲320x200設計的應用程序將自動擴展到例如VGA設備的較大顯示屏。如何製作壓縮框架自定義控件AutoScale aware
這很好,但我有一些自制的自定義控件,他們自己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控件都沒有內部字段來存儲比例因子,所以我想知道是否有更容易或更好的方法來做到這一點。