ID2D1RenderTarget::GetSize 返回物理像素而不是 DIP
ID2D1RenderTarget::GetSize returing physical pixels instead of DIP
我目前 getting started with Win32 and Direct2D and reached the chapter on DPI and DIP。在最底部,它表示 ID2D1RenderTarget::GetSize
returns 大小为 DIP,ID2D1RenderTarget::GetPixelSize
为物理像素。他们的个人文件证实了这一点。
但是我无法观察到 ID2D1RenderTarget::GetSize
实际上 returns 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();
在 this 示例的方法 MainWindow::CalculateLayout
中(并打印值),
- 并将 window 从一个屏幕移动到另一个屏幕,并任意调整它的大小。
当从一个显示器移动到另一个显示器时,我可以看到 window 边框的大小在变化。但是,sizeP
和 size
中的值(除了 int 和 float 之外)始终相同并且对应于 ID2D1HwndRenderTarget
的 physical 大小.
由于我不希望文档有缺陷,我想知道我缺少什么来实际获得 ID2D1HwndRenderTarget
pRenderTarget
.
的 window 的 DIP
大小仅与渲染目标的 DPI 相关,使用 ID2D1RenderTarget::SetDpi
设置。该值不会自动连接到显示系统提供的值,可以使用ID2D1Factory::GetDesktopDpi
或GetDpiForMonitor
.
查询
我目前 getting started with Win32 and Direct2D and reached the chapter on DPI and DIP。在最底部,它表示 ID2D1RenderTarget::GetSize
returns 大小为 DIP,ID2D1RenderTarget::GetPixelSize
为物理像素。他们的个人文件证实了这一点。
但是我无法观察到 ID2D1RenderTarget::GetSize
实际上 returns 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();
在 this 示例的方法
MainWindow::CalculateLayout
中(并打印值),- 并将 window 从一个屏幕移动到另一个屏幕,并任意调整它的大小。
当从一个显示器移动到另一个显示器时,我可以看到 window 边框的大小在变化。但是,sizeP
和 size
中的值(除了 int 和 float 之外)始终相同并且对应于 ID2D1HwndRenderTarget
的 physical 大小.
由于我不希望文档有缺陷,我想知道我缺少什么来实际获得 ID2D1HwndRenderTarget
pRenderTarget
.
大小仅与渲染目标的 DPI 相关,使用 ID2D1RenderTarget::SetDpi
设置。该值不会自动连接到显示系统提供的值,可以使用ID2D1Factory::GetDesktopDpi
或GetDpiForMonitor
.