我目前正在开始使用Win32和Direct2D,并达到了DPI和DIP的章节。在最底部,它说ID2D1RenderTarget::GetSize
将大小返回为 DIP,ID2D1RenderTarget::GetPixelSize
返回为物理像素。他们的个人文件证实了这一点。 但是我无法观察到ID2D1RenderTarget::GetSize
实际上返回 DIP。
我测试了它
- 将我的两个相同显示器之一的比例设置为 175%,
- 将
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
添加到我的应用程序清单, -
获得
D2D1_SIZE_U sizeP = pRenderTarget->GetPixelSize(); D2D1_SIZE_F size = pRenderTarget->GetSize();
在此示例的方法
MainWindow::CalculateLayout
(并打印值(中, - 并将窗口从一个屏幕移动到另一个屏幕,并任意调整其大小。
我可以看到从一个显示器移动到另一个显示器时窗口边框的大小在变化。但是,sizeP
和size
中的值(除了 int 和 float 之外(始终相同,并且对应于ID2D1HwndRenderTarget
的物理大小。
由于我不希望文档有缺陷,因此我想知道我缺少什么才能实际获得ID2D1HwndRenderTarget
pRenderTarget
窗口的DIP。
大小仅相对于呈现目标的 DPI,使用ID2D1RenderTarget::SetDpi
进行设置。此值不会自动连接到显示系统提供的值,可以使用ID2D1Factory::GetDesktopDpi
或GetDpiForMonitor
进行查询。