字体在Windows 8上变小 - 在C++/MFC程序中.如何避免这种情况

Fonts get smaller on Windows 8 - in C++/MFC-program. How avoid this?

本文关键字:程序 何避免 情况 MFC C++ Windows 字体      更新时间:2023-10-16

也许这是一个愚蠢的问题,但我找不到解决方案......

我维护一个C++系统 - 使用 MFC,符合 VS2010。系统包含两个 EXE 文件。

其中一个EXE文件在Windows 8上运行良好。对话框中文本的字体大小在窗口 8 上与在 Vista/Windows 7 上相同。但是在Windows 8上运行另一个EXE文件时,所有字体都小得多。(该程序是基于对话框的,使用 CPropertySheet/CPropertyPage。

我读过关于"DPI意识"的文章,并且在Windows 8中处理方式不同。但我看不出这如何导致这种情况 - 或如何解决它。两个 EXE 文件的工作方式相同:使用 CreateFontIndirect 创建 CFont:s(指定字体名称和大小),然后在 SetFont-calls 中使用该 CFont:s。

有什么想法吗?为什么这在一个程序中有效,而在另一个程序中不起作用?我只想关闭这种行为,以便GUI在Windows 8上看起来相同。我将非常感谢一些帮助!:-)

/安德斯(来自瑞典

当您使用 CreateFontIndirect 创建 CFont 时,您应该提供如下所示的 DPI 比例因子:

// From CDPI: convert a point size (1/72 of an inch) to raw pixels.
int PointsToPixels(int pt) { return MulDiv(pt, _dpiY, 72); }
LOGFONT lf;
lf.lfHeight = -g_metrics.PointsToPixels(12);
// Fill in the rest of the structure.
HFONT hfont = CreateFontIndirect(&lf);

该代码取自 MSDN 文章,详细介绍了创建 DPI 感知桌面应用程序。

这篇 TechNet 文章介绍了如何为特定应用程序禁用 Windows 8 DPI 缩放。这可能对您有用。