【问题标题】:How to show Emoji such as ☔ and ???? in a Microsoft MFC CListCtrl?如何显示 ☔ 和 ???? 等表情符号在 Microsoft MFC CListCtrl 中?
【发布时间】:2014-11-17 09:52:01
【问题描述】:

我正在使用 MFC CListctrl 开发一个桌面应用程序,使用 Unicode 构建。

listctrl可以正确显示!@#$%︿&*(), 但不是表情符号☔和????。

这是一个“虚拟 listctrl”,lvItem.pszText 似乎在内存中正确地保存了 UNICODE“26 14”的 ☔,但显示不正确。

我在 Windows 7 上使用 Visual Studio 2012。 任何想法将不胜感激。 谢谢!

[编辑 20140929]

感谢 Werner Henze,我发现“Segoe UI Symbol”可以在 Windows 7 中正确显示表情符号 http://www.istartedsomething.com/20120818/microsoft-backports-windows-8-emoji-for-segoe-ui-symbol-to-windows-7/

Microsoft KB2729094 titled “An update for the Segoe UI symbol font in Windows 7 and in Windows Server 2008 R2 is available” is presumed to be made available through Windows Update soon.

但是“Segoe UI 符号”似乎在韩语字符上失败(正确显示为“Segoe UI”)。

【问题讨论】:

  • Emoji 需要 DirectWrite,MFC 不包装它。 MFC 非常卡在 user32 上。它没有与我知道的任何桌面类库集成。
  • DirectWrite 可以用在自绘列表框中吗? (我不明白为什么它可能不会,但总是更安全地问????。)
  • 这在技术上当然是可行的。但是这种基于投诉的编程、程序员必须学习 COM、QA 为不一致的文本渲染编写错误报告以及用户抱怨廉价显示器上文本的可读性会破坏乐趣。

标签: visual-studio-2012 mfc emoji clistctrl


【解决方案1】:

有几件事要记住。

首先你的程序应该使用RegisterWindowW 而不是RegisterWindowA,这样你的窗口就被实例化为一个Unicode 窗口。如果您正在为 Unicode 进行编译,这将自动为 MFC 提供的主窗口类完成。

其次,您必须选择能够显示所需字符的字体。您可以检查正在使用的字体,也可以使用以下代码 sn-p 更改它(在我的代码中取自 OnCreate):

CFont * pFont = m_listctrl.GetFont();
ASSERT((HFONT)m_fontListLog == nullptr);
LOGFONT logfont;
VERIFY(pFont->GetLogFont(&logfont));
_tcscpy(logfont.lfFaceName, _T("my desired font"));
VERIFY(m_font.CreateFontIndirect(&logfont));
m_listctrl.SetFont(&m_font);

您可以使用charmap.exe查看哪种字体支持哪些字符。

我使用字体“Segoe UI”和字符 0x214e 测试成功,但无法输出您的 0x2614,因为该字体不支持它。

【讨论】:

    【解决方案2】:

    感谢 Werner Henze, 我发现“Segoe UI Symbol”可以在 Windows 7 中正确显示表情符号 http://www.istartedsomething.com/20120818/microsoft-backports-windows-8-emoji-for-segoe-ui-symbol-to-windows-7/

    Microsoft KB2729094 标题为“Segoe UI 符号字体的更新 Windows 7 和 Windows Server 2008 R2 中可用”假定为 即将通过 Windows 更新提供。

    但是“Segoe UI Symbol”似乎在韩语字符上失败(正确显示为“Segoe UI”)。

    【讨论】:

    • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。同时,请不要使用答案发布 cmets。
    • 谢谢 Ed Cottrell 和 Monacraft,我编辑了我的问题并将删除此答案。
    猜你喜欢
    • 1970-01-01
    • 2020-07-13
    • 2014-09-06
    • 2016-01-08
    • 2021-09-23
    • 2021-06-22
    • 2014-05-17
    • 2016-04-05
    • 2014-07-17
    相关资源
    最近更新 更多