ComponentOne 2020v3版本致力于将最需要的ComponentOne控件引入.NET 5框架,并为WinForms Edition添加了令人兴奋的新功能。 其中的一项功能是借助C1Icon对C1Ribbon控件进行了高DPI支持。
C1Ribbon:支持高DPI新的C1Ribbon控件使用C1Icon对象集定义图标,这些图标应以不同的元素状态或不同的元素大小显示在单独的Ribbon元素中。例如,您可以为16x16元素大小指定一个小的符号图标,为32x32元素大小指定一个较大的png图像,以及在HighDPI模式下使用的可选矢量图标,这可能需要具有不同大小的大图像。 C1Icon是一系列类,允许指定可以着色和调整大小的单色图标。这些图标被认为在控件内部使用,并允许客户通过控件的API指定不同的图标。可能的来源是字体,矢量(路径或SVG)和图像。
新版本中,对高分辨率DPI显示器的支持现在已成为WinForms的C1Ribbon的内置部分。通过支持高DPI,现在使用C1Ribbon开发的WinForms应用程序,可以在高DPI设备上显示而不会降低质量。 这意味着,当应用程序在缩放设置不同于100%的系统上运行时,它将被正确缩放。
高DPI | 没有高DPI |
|
|
在进一步探讨如何启用缩放的细节之前,我们先简要了解一下DPI是什么以及为什么它很重要。
DPI和显示缩放因子每英寸点数(DPI),从技术上讲是指每英寸打印机点数,它是空间打印的度量。对于显示器来说,指可以在1英寸范围内的一行中放置的单个点的数量。 大多数旧式桌面UI框架都有内置的假设,即在使用过程中,显示器的DPI不会更改。不过,这种假设不再成立,因为在多显示器设置(如每个显示器具有不同的比例因子)的情况下,显示器DPI现在通常会发生多次更改,这些情况是通过远程桌面从高DPI笔记本电脑/平板电脑连接到低DPI设备的等 在这种情况下,如果未进行DPI缩放,则应用程序看起来模糊和/或大小不正确。
启用缩放要启用缩放,您所要做的就是将您的应用程序声明为支持DPI,C1Ribbon会根据当前DPI设置自动缩放其UI元素。 根据目标.NET框架的不同,有多种方法可以启用/禁用缩放。 如果目标框架是.NET v4.7或更高版本,并且您要在Windows 10 Creators Update开始的Windows操作系统上运行它,则必须添加app.manifest文件和/或app.config文件 但是,如果目标框架是.NET Core 3.0或更高版本,则不需要app.manifest和app.config文件。从.NET Core 3.0开始,Microsoft引入了一种为Windows窗体设置高DPI模式的新方法。静态方法称为Application.SetHighDpiMode(HighDpiMode),其中HighDpiMode是一个枚举,并具有以下值:DpiUnaware,SystemAware,PerMonitor,PerMonitorV2和DpiUnawareGdiScaled。 - Application.SetHighDpiMode(HighDpiMode.PerMonitorV2);
复制代码
DPI Awareness Mode“ DPI Awareness Mode”指定在高分辨率屏幕上显示应用程序时的显示方式。
DPI Awareness:已启用 | DPI Awareness:禁用 |
|
|
下表共享了“ HighDpiMode”枚举可用的各种值。 项目 | 值 | 描述 | DpiUnaware | 0 | 应用程序窗口不会为DPI更改而缩放,并且始终假定缩放比例为100%。 | DpiUnawareGdiScaled | 4 | 与DpiUnaware相似,但是提高了基于GDI / GDI +的内容的质量。 | PerMonitor | 2 | 窗口在创建时会检查DPI,并在DPI更改时调整比例因子。 | PerMonitorV2 | 3 | 与PerMonitor相似,但可启用子窗口DPI更改通知,改进的comctl32控件缩放以及对话框缩放。 | SystemAware | 1 | 该窗口一次查询主监视器的DPI,并将其用于所有监视器上的应用程序。 |
结论随着显示技术的发展,从不需要DPI缩放到缩放变得越来越关键,使用WinForms编写的成千上万的应用程序,都需要有良好的High DPI支持,使用C1Ribbon,您可以无缝创建最新的Microsoft Office 2019风格的应用程序。并完美的支持高DPI
|