winapi - ID2D1RenderTarget::GetSize 返回物理像素而不是 DIP
问题描述
我目前正在开始使用 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
and中的值(除了是 int 和floatsize
)总是相同的,并且对应于.
ID2D1HwndRenderTarget
由于我不希望文档有缺陷,我想知道我缺少什么来实际获得ID2D1HwndRenderTarget
pRenderTarget
.
解决方案
大小仅与渲染目标的 DPI 相关,使用ID2D1RenderTarget::SetDpi
. 该值不会自动连接到显示系统提供的值,可以使用ID2D1Factory::GetDesktopDpi
或查询GetDpiForMonitor
。
推荐阅读
- swift - 无法单击 CollectionViewCell 以 Segue 到新的 ViewController
- python-3.x - 如何使用 drawString() 在 reportlab.pdfgen 中启用阿拉伯语支持?
- c# - TCP-IP 客户端-服务器应用程序来操作字典
- ios - 如果我有一个过滤搜索结果的 UITableView,如何将 ViewDidLoad() 上的 IndexPath 设置为常量,即使在搜索时也是如此
- looker - 如何计算 Looker 计算字段中第一行值的百分比?
- python - 计算文件中 if 语句的数量
- amazon-elb - 如何在 ELB 应用程序负载均衡器上将 HTTPS 重定向到 HTTP
- regex-group - 正则表达式如何从多行中获取 3 组行
- angular - 如何使用 eventemitter 检查输入的当前值?
- microsoft-graph-api - 在 Microsoft Graph API 中处理用户特定的共享日历 ID