【发布时间】:2012-11-15 03:36:00
【问题描述】:
以下代码在 Windows 7(和以前版本的 Windows)和 Windows 8 之间以不同的方式显示相同的字符串:
Graphics graphics(ps.hdc);
std::unique_ptr<StringFormat> format(StringFormat::GenericDefault()->Clone());
Font font(L"Segoe UI", static_cast<Gdiplus::REAL>(17.5), FontStyleBold, UnitPixel);
format->SetTrimming(StringTrimmingNone);
std::wstring name("rt");
RectF rectName;
graphics.MeasureString(name.c_str(), -1, &font, PointF(20, 20), format.get(), &rectName);
graphics.DrawString(name.c_str(), -1, &font, rectName, format.get(), &SolidBrush(Color()));
graphics.DrawRectangle(&Pen(Color(255, 0, 0)), rectName);
在 Windows 7 中,我得到了矩形内的字符串 'rt',因为它应该出现。在 Windows 8 中,仅出现第一个字母“r”。这似乎只发生在某些字符对上。例如,字符串 're' 在两个操作系统中都能正确显示。从 MeasureString() 返回的矩形在 Windows 7 和 Windows 8 中似乎是相同的。对这种差异有什么解释吗?
【问题讨论】:
-
GDI+ 因文本渲染不一致而臭名昭著。 Windows 8 角度可能是不同的视频适配器 DPI 设置。
标签: winapi visual-c++ windows-8 gdi+ gdi