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。

我通过

测试了它
  1. 将我的两个其他方面相同的显示器之一的比例设置为 175%,
  2. <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness> 添加到我的应用程序清单中,
  3. 获得

    D2D1_SIZE_U sizeP = pRenderTarget->GetPixelSize();
    D2D1_SIZE_F size = pRenderTarget->GetSize();
    

    this 示例的方法 MainWindow::CalculateLayout 中(并打印值),

  4. 并将 window 从一个屏幕移动到另一个屏幕,并任意调整它的大小。

当从一个显示器移动到另一个显示器时,我可以看到 window 边框的大小在变化。但是,sizePsize 中的值(除了 int 和 float 之外)始终相同并且对应于 ID2D1HwndRenderTargetphysical 大小.

由于我不希望文档有缺陷,我想知道我缺少什么来实际获得 ID2D1HwndRenderTarget pRenderTarget.

的 window 的 DIP

大小仅与渲染目标的 DPI 相关,使用 ID2D1RenderTarget::SetDpi 设置。该值不会自动连接到显示系统提供的值,可以使用ID2D1Factory::GetDesktopDpiGetDpiForMonitor.

查询