【问题标题】:Why are not all texts of my MFC applicatiopn displayed using ClearType?为什么我的 MFC 应用程序的所有文本都没有使用 ClearType 显示?
【发布时间】:2011-01-26 11:12:59
【问题描述】:

我有一个使用 VC6 构建的 MFC 应用程序。启用 ClearType (Windows XP) 时,某些文本会平滑呈现,即使用 ClearType,而其他文本则不会。

对话文本似乎永远不会使用 ClearType 呈现。然而,一些列表控件完全启用了它,其他的只在它们的标题中。

这可能是什么原因?我应该从哪里找出为什么它只在某些地方有效而在其他地方无效?

更新
根据要求,这是放大的屏幕截图。被混淆了,但重要的部分应该是可见的。

  • List 1 中只有标题是平滑的,内容不是。
  • List 2 中,标题和列表项都很平滑。
  • 底部的Dialog 也没有使用ClearType。

【问题讨论】:

  • 如果您能找到发布屏幕截图的方法,它可能会有所帮助。

标签: mfc fonts visual-c++ dialog cleartype


【解决方案1】:

ClearType 是字体的质量属性。您应该为您的 CFont 获取 LOGFONT 并设置 lfQuality 属性。这是一个例子。

CFont *pFont = CFont::FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT));
LOGFONT logFont;
pFont->GetLogFont(&logFont);
logFont.lfQuality = CLEARTYPE_NATURAL_QUALITY;

CFont font2;
font2.CreateFontIndirect(&logFont);

注意:您可以使用CLEARTYPE_QUALITYCLEARTYPE_NATURAL_QUALITY,测试两者,看看哪个看起来最好。

【讨论】:

    【解决方案2】:

    位图字体永远不会使用 ClearType。通常你不会使用位图字体,但我相信默认选择到 DC 中的是系统字体,即位图。

    【讨论】:

    • 幸好没有使用位图字体。
    • 第三个屏幕截图表明并非如此。它看起来像“MS Sans Serif”,它是一种位图字体。如果你想要一个非常相似的非位图版本切换到“Microsoft Sans Serif”
    猜你喜欢
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多