字体在Windows 8上变小 - 在C++/MFC程序中.如何避免这种情况
Fonts get smaller on Windows 8 - in C++/MFC-program. How avoid this?
也许这是一个愚蠢的问题,但我找不到解决方案......
我维护一个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 缩放。这可能对您有用。
相关文章:
- 如何使特定程序仅从安装的路径运行以避免DLL劫持
- 避免在 C/C++ 和 std::array 中使用 TCP 时阻止程序
- 如何避免对无锁程序使用易失性?
- 如果我对"while"块发表评论,为什么程序会死机?其中的"yield"线有何影响?
- 在使用 std::cout 和多线程程序中如何避免数据竞争<iomanip>?
- 如何构建程序以避免查询对象类型?
- 有没有办法避免在发生堆栈粉碎时终止程序
- 如何避免在C 11服务器程序中为多个客户端使用多个线程
- 如何避免多个删除程序 lambda
- 是否有任何合理的场景,程序员可能希望避免布尔表达式的短路计算
- 避免在iOS应用程序上进行反向工程,这是可能的
- 避免C++程序的冗余映射
- Qt:避免在字符串更改的情况下重建应用程序
- 字体在Windows 8上变小 - 在C++/MFC程序中.如何避免这种情况
- 从应用程序启动 Linux 服务时避免套接字继承C++
- boost::mutex 无法帮助避免C++程序中的竞争条件
- 避免对自定义类使用初始化程序列表
- 在C#程序中避免这种竞争条件
- 良好的程序设计/避免多重冗余检查的最佳实践(例如在C++中)
- 如何在这个程序中避免无限循环