我正在以Per-Monitor v2 DPI Aware模式运行.NET桌面应用程序。正确绘制UI的WinForms部分要求所有绘制者都知道当前的DPI值。高级画家可以从HWND
中获得它,这是一个可行的解决方案。但是,较低级别的画家只有一个GDI + System.Drawing.Graphics
对象。
我正在努力使System.Drawing.Graphics
告诉正确的DPI。现在,无论它的HWND
的当前DPI如何,我都可以看到系统级DPI。其DpiX
/ DpiY
属性是只读的,因此必须间接影响它们。
Graphics
有两种基本的控件创建方式,可以是其HWND
或上面的HDC
(可能来自{{1} }或::GetDC
甚至::BeginPaint
参数)。无论哪种方式,它仅具有SYSTEM DPI值,而没有每个监视器可识别的值。制作一个WM_PAINT
,对其进行适当的配置,然后首先将其绘制,然后将其涂抹到控件上可能会起作用,但这并不是太整洁也不是最佳的。
因此:我在WinForms控件的Bitmap
上看到了一个很好的针对每个监视器的DPI,我想在HWND
对象Graphics
上看到相同的漂亮值/ DpiX
上该控件的属性,有办法吗?
答案 0 :(得分:0)
现在应该有办法了。要在两个监视器上显示表单,您必须创建2个实例。要将图形/图像加载到两种形式,您只需要该图形的一个实例。 图形独立于您的显示器,而内部不需要它(仅一个像素集合)。