2014-09-23 3 views
2

Я разрабатываю настольное приложение с MFC CListctrl, создавая с помощью Unicode.Как показать Emoji, такие как ☔ и в Microsoft MFC CListCtrl?

Listctrl может правильно показать! @ # $% ︿ & *(), , но не Emojis ☔ и.

Это «виртуальный список», и lvItem.pszText кажется правильно удерживающим в памяти UNICODE «26 14» для ☔, но не отображается правильно.

Я использую Visual Studio 2012 в Windows 7. Любые мысли будут оценены. Спасибо!

[РЕДАКТИРОВАНИЕ 20140929]

Благодаря Вернер Хенце, я обнаружил, что "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 Symbol", похоже, не удалось на корейских персонажах (что правильно показано с помощью «Segoe UI»).

+2

Emoji требует DirectWrite, MFC не обертывает его. MFC довольно застрял с user32. Он не интегрирован ни в одну библиотеку классов, о которой я знаю. –

+1

Может ли DirectWrite использоваться в окне, нарисованном владельцем? (Я не вижу причины, почему это возможно, но, тем не менее, всегда безопаснее спрашивать.) – usr2564301

+1

Это, безусловно, технически возможно. Но это программирование, основанное на жалобах, хор программистов, которым приходится изучать COM, QA, написание отчетов об ошибках для непоследовательного текстового рендеринга, а пользователи, читающие об удобочитаемости текста на своих дешевых мониторах, портят удовольствие. –

ответ

1

Следует иметь в виду несколько вещей.

Сначала ваша программа должна использовать RegisterWindowW, а не RegisterWindowA, поэтому ваше окно создается как окно Unicode. Это делается автоматически для классов основного окна MFC, если вы компилируете для Unicode.

Во-вторых, вы должны выбрать шрифт, который способен отображать требуемые символы. Вы можете проверить, какой шрифт используется и, возможно, изменить его с помощью этого фрагмента кода (в моем коде, взятом из 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, потому что шрифт не поддерживает его.

0

Благодаря Вернер Хенце, я узнал, что "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»).

+0

Это не дает ответа на вопрос.Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы будете быть в состоянии [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). В то же время, пожалуйста, не используйте ответы для комментариев. –

+0

Спасибо Ed Cottrell и Monacraft, я отредактировал свой вопрос и удалю этот ответ. – pac

Смежные вопросы