如何使紧凑框架自定义控件AutoScale识别
Windows窗体(包括Windows Form for Compact Framwork,我正在使用的)具有AutoScalefunction 。 通过将AutoScaleMode
属性设置为AutoScaleMode.Dpi
,您的应用程序(例如320×200)会自动扩展到较大的显示器(例如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控件都没有内部字段来存储比例因子,我想知道是否有更简单或更好的方法来执行此操作。
我们通常在控件和表单中处理OnResize
中的所有缩放。 我们还必须支持许多具有疯狂尺寸和DPI的不同设备(有些参数甚至没有报告正确的DPI!)。 我们发现,在AutoScaleMode
关闭时,您可以按比例使用这样的帮助程序来扩展OnResize
表单的子项。 您只需在构造函数中将Size _initalSize
成员集添加到表单大小。 然而,我通常在大多数表格中发现,我必须编写自定义布局代码以适当处理纵向和横向显示。
上述就是C#学习教程:如何使紧凑框架自定义控件AutoScale识别分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
protected override void OnResize(EventArgs e) { base.OnResize(e); // Scale the control ScaleChildren(this, ref _initialFormSize); } public static void ScaleChildren(Control control, ref Size initialSize, float fontFactor) { if (control == null || control.Size == initialSize) return; SizeF scaleFactor = new SizeF((float)control.Width / (float)initialSize.Width, (float)control.Height / (float)initialSize.Height); initialSize = control.Size; if (!float.IsInfinity(scaleFactor.Width) || !float.IsInfinity(scaleFactor.Height)) { foreach (Control child in control.Controls) { child.Scale(scaleFactor); if (child is Panel) continue; try { // scale the font float scaledFontSize = (float)(int)(child.Font.Size * scaleFactor.Height * fontFactor + 0.5f); System.Diagnostics.Debug.WriteLine( string.Format("ScaleChildren(): scaleFactor = ({0}, {1}); fontFactor = {2}; scaledFontSize = {3}; "{4}"", scaleFactor.Width, scaleFactor.Height, fontFactor, scaledFontSize, child.Text)); child.Font = new Font(child.Font.Name, scaledFontSize, child.Font.Style); } catch { } } } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/961574.html