Windows 8 上的字体变小 - 在 C++/MFC 程序中。如何避免这种情况?
Fonts get smaller on Windows 8 - in C++/MFC-program. How avoid this?
也许这是一个愚蠢的问题,但我找不到解决方案...
我维护一个C++系统-使用MFC,兼容VS2010。系统包含两个 EXE 文件。
其中一个 EXE 文件在 Windows8 上运行良好。对话框中文本的字体大小在 Window8 上与在 Vista/Windows7 上相同。但是当 运行 Windows 8 上的另一个 EXE 文件,所有字体都小得多。 (该程序是基于对话框的,使用 CPropertySheet/CPropertyPage。)
我读过 "DPI awareness",并且在 Windows 8 中对此有不同的处理。但我看不出这是怎么导致的 - 或者如何解决它。两个 EXE 文件的工作方式相同:使用 CreateFontIndirect(指定字体名称和大小)创建 CFont:s,然后在 SetFont 调用中使用 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 article 详细介绍创建 DPI 感知桌面应用程序。
此 TechNet article 解释了如何为特定应用程序禁用 Windows 8 DPI 缩放。这可能对你有用。
也许这是一个愚蠢的问题,但我找不到解决方案...
我维护一个C++系统-使用MFC,兼容VS2010。系统包含两个 EXE 文件。
其中一个 EXE 文件在 Windows8 上运行良好。对话框中文本的字体大小在 Window8 上与在 Vista/Windows7 上相同。但是当 运行 Windows 8 上的另一个 EXE 文件,所有字体都小得多。 (该程序是基于对话框的,使用 CPropertySheet/CPropertyPage。)
我读过 "DPI awareness",并且在 Windows 8 中对此有不同的处理。但我看不出这是怎么导致的 - 或者如何解决它。两个 EXE 文件的工作方式相同:使用 CreateFontIndirect(指定字体名称和大小)创建 CFont:s,然后在 SetFont 调用中使用 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 article 详细介绍创建 DPI 感知桌面应用程序。
此 TechNet article 解释了如何为特定应用程序禁用 Windows 8 DPI 缩放。这可能对你有用。