为什么 wxDC::GetTextExtent() return 在 wxWidgets 中显示相同的高 DPI 值?

why does wxDC::GetTextExtent() return the same value for a high DPI display in wxWidgets?

我正在尝试使用 wxWidgets 扩展我用 c++ 编写的应用程序以实现高 DPI 显示。我正在遵循 official link. Everythings work fine so far except the return value of wxDC::GetTextExtent() function. When I move my window to a monitor with a different DPI, the font size scales but the return value of the wxDC remains the same as before. However if I use wxWindow::GetTextExtent() 中的指南,它 returns 是正确的值!在文档中,它说所有 wxWidgets API 使用逻辑像素,但它似乎并非如此。

换句话说,如果您尝试在高 DPI 显示器的设备上下文 (dc) 上绘制“文本”,绘制的文本会很小,因为 wxDC 测量的字体高度值很小(例如不缩放)。但是,wxWindow 绘制的所有其他文本都可以正确缩放。

这种行为是故意的吗?我应该怎么做才能获得正确的价值?我正在使用 wxWidgets 3.1.5 和 Win 10。

另外不清楚wxWidgets是使用设备独立像素(DIP)还是逻辑像素?

wxDC::GetTextExtent()wxWindow::GetTextExtent() 应该 return 相同的值,如果我在最小样本中插入此代码:

void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
    wxClientDC dc(this);
    wxLogMessage("wxDC: %d, wxWindow: %d",
                 dc.GetTextExtent("Hello").x,
                 GetTextExtent("Hello").x);
}

它在默认 DPI 屏幕上显示“wxDC: 28, wxWindow: 28”,在 wxWidgets 3.1.6 中使用 200% DPI 缩放时显示“wxDC: 56, wxWindow: 56”,因此您可能只需要更新到此版本。