首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建支持DPI的应用程序

创建支持DPI的应用程序
EN

Stack Overflow用户
提问于 2010-11-02 15:56:27
回答 9查看 103.2K关注 0票数 74

我有一个C#格式的表单应用程序。当我改变显示器的DPI时,所有的控件都会移动。我使用了代码this.AutoScaleMode = AutoScaleMode.Dpi,但它并没有避免这个问题。

有谁有主意吗?

EN

Stack Overflow用户

发布于 2015-03-09 17:17:58

  1. 如果你想要你的WinForms应用程序是DPI感知的应用程序,除了尝试很好的答案,如果你有一个大的项目,你可能想要自动缩放你的表单及其内容,你可以通过创建ScaleByDPI函数来实现:

ScaleByDPI函数将接收一个控件参数,该参数通常是一个表单,然后递归地迭代所有子控件(如果为(control.HasChildren == true)),并缩放应用程序控件的位置和大小&字体的大小和大小到操作系统配置的DPI。你也可以尝试实现它的图像,图标和图形。

ScaleByDPI函数特别说明:

a.对于所有默认字体大小的控件,您需要将它们的Font.Size设置为8.25。

b.可以通过(control.CreateGraphics().DpiX / 96)和(control.CreateGraphics().DpiY / 96)得到devicePixelRatioX和devicePixelRatioY的值。

c.你需要基于control.Dock和control.Anchor值的算法来缩放Control.Size和Control.Location。请注意,control.Dock可能有6个可能值中的1个,而control.Anchor可能有16个可能值中的1个。

d.此算法将需要设置下一个布尔变量isDoSizeWidth,isDoSizeHeight,isDoLocationX,isDoLocationY,isDoRefactorSizeWidth,isDoRefactorSizeHeight,isDoRefactorLocationX,isDoRefactorLocationY,isDoClacLocationXBasedOnRight,isDoClacLocationYBasedOnBottom的值。

e.如果您的项目使用Microsoft控件以外的控件库,则此控件可能需要特殊处理。

有关上述内容的详细信息(d.)布尔变量:

*有时需要将一组控件(可能是一组按钮)依次放置在同一条垂直线上,其锚定值为右而不是左,或者需要将一组控件相继放置在同一条水平线上,锚定值为底而不是顶,此时需要重新计算控件的位置值。

*对于Anchor包含Top & Bottom和\or Left & Right的控件,您需要重新考虑控件的大小和位置值。

ScaleByDPI函数的用法:

a.在任何表单构造函数的末尾添加下一条命令: ScaleByDPI(this);

b.当动态地将任何控件添加到表单时,调用ScaleByDPI(ControlName)。

  1. 在构造函数结束后动态设置任何控件的大小或位置时,请创建并使用next函数之一以获取大小或位置的缩放值: ScaleByDPI_X \ ScaleByDPI_Y \ ScaleByDPI_Size \ ScaleByDPI_Point
  2. In若要将应用程序标记为支持

,请将ScaleByDPI_Size元素添加到应用程序的程序集清单中。

  1. 将所有容器的GraphicsUnit of Control.Font设置为所有容器的*.Designer.cs文件。将AutoScaleMode值设置为ComboBox和TextBox等System.Windows.Forms.AutoScaleMode.None
  2. in控件,更改Control.Size.Hieght没有任何影响。在这种情况下,更改Control.Font.Size将固定控件的高度。
  3. 如果form StartPosition的值为FormStartPosition.CenterScreen,则需要重新计算窗口的位置。
票数 1
EN
查看全部 9 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4075802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档