首页 > 解决方案 > ID2D1RenderTarget::GetSize 返回物理像素而不是 DIP

问题描述

我目前正在开始使用 Win32和 Direct2D 并到达关于 DPI 和 DIP 的章节。在最底部,它表示ID2D1RenderTarget::GetSize以 DIP 和ID2D1RenderTarget::GetPixelSize物理像素的形式返回大小。他们的个人文件证实了这一点。但是我无法观察到ID2D1RenderTarget::GetSize实际返回 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();
    

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

  4. 并将窗口从一个屏幕移动到另一个屏幕,并任意调整其大小。

从一个显示器移动到另一个显示器时,我可以看到窗口边框的大小发生变化。但是,sizePand中的值(除了是 int 和floatsize)总是相同的,并且对应于. ID2D1HwndRenderTarget

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

标签: winapidpidirect2d

解决方案


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


推荐阅读