Страница 2 из 2
Re: Хвалёный Уникод не работает
Добавлено: 12 авг 2009, 15:37
Albor
programisto писал(а): съедает значок над буквой. Тот же фонт при помощи TextOutW выводится правильно.
Для комбобокса: возможно размер шрифта больше размера айтема комбобокса - происходит затирание части текста соседним айтемом.
Re: Хвалёный Уникод не работает
Добавлено: 12 авг 2009, 19:02
programisto
Albor писал(а):Для комбобокса: возможно размер шрифта больше размера айтема комбобокса - происходит затирание части текста соседним айтемом.
He похоже. Заглавные буквы не обрезает.
B Richedit тоже неправильно показывает Уникод.
У меня впечатление - Уникод работает только в TextOut
Re: Хвалёный Уникод не работает
Добавлено: 16 авг 2009, 15:21
programisto
Decoder писал(а):Наверно caм что-то делаешь неправильно.
Вот что накопал в Инете:
Обратите внимание, что стандартные компоненты не могут работать с юникод строками! Правильно отображать UNICODE строки, даже после всех необходимых перекодировок, могут
•только контролы, которые написаны специальным образом,
•контролы с установленными UNICODE шрифтами.
Но подробнее ничего нет.
Re: Хвалёный Уникод не работает
Добавлено: 18 авг 2009, 08:30
Decoder
Честно говоря, у меня вызывает сомнение надёжность такого источника информации. Возможно подобное утверждение было актуально для Windows 95/98.
Достаточно открыть MSDN и найти там справку по сообщению
CB_ADDSTRING.
Вoт как описываются параметры функции
SendMessage для данного сообщения:
Код: Выделить всё
[size=84]lResult = SendMessage( [/size][size=84] // returns LRESULT in lResult [/size]
[size=84](HWND) hWndControl, [/size][size=84] // handle to destination control [/size]
[size=84](UINT) CB_ADDSTRING, [/size][size=84] // message ID [/size]
[size=84](WPARAM) wParam, [/size][size=84] // = 0; not used, must be zero[/size]
[size=84](LPARAM) lParam [/size][size=84] // = (LPARAM) (LPCTSTR) lParam;[/size]
[size=84]);[/size]
Тип
LPCTSTR говорит о том, что строка может передаваться как в кодировке ANSI, так и в UNICODE, в зависимости от текущих настроек проекта.
Re: Хвалёный Уникод не работает
Добавлено: 18 авг 2009, 11:49
programisto
Decoder писал(а):Честно говоря, у меня вызывает сомнение надёжность такого источника информации. Возможно подобное утверждение было актуально для Windows 95/98.
Достаточно открыть MSDN и найти там справку по сообщению
CB_ADDSTRING.
Вoт как описываются параметры функции
SendMessage для данного сообщения:
Код: Выделить всё
[size=84]lResult = SendMessage( [/size][size=84] // returns LRESULT in lResult [/size]
[size=84](HWND) hWndControl, [/size][size=84] // handle to destination control [/size]
[size=84](UINT) CB_ADDSTRING, [/size][size=84] // message ID [/size]
[size=84](WPARAM) wParam, [/size][size=84] // = 0; not used, must be zero[/size]
[size=84](LPARAM) lParam [/size][size=84] // = (LPARAM) (LPCTSTR) lParam;[/size]
[size=84]);[/size]
Тип
LPCTSTR говорит о том, что строка может передаваться как в кодировке ANSI, так и в UNICODE, в зависимости от текущих настроек проекта.
Проблема для Richedit решена. Ошибка была в том, что для Richedit была определена оконная процедура. После удаления оконной процедуры всё заработало как нужно. Решение подсказали на венгерском форуме.
Re: Хвалёный Уникод не работает
Добавлено: 19 авг 2009, 01:51
BBB
programisto писал(а):Проблема для Richedit решена. Ошибка была в том, что для Richedit была определена оконная процедура. После удаления оконной процедуры всё заработало как нужно. Решение подсказали на венгерском форуме.
Не очень понятно. Можно поподробнее? Что значит "была определена" и "удалена"? Ведь у каждого окна существует обработчик событий, т.е. "оконная процедура". Как же без нее?
Re: Хвалёный Уникод не работает
Добавлено: 19 авг 2009, 21:06
programisto
Я не вполне корректно выразился, была определена процедура редактирования следующим образом:
SetWindowLong(hWndRichEdit,GWL_WNDPROC, pEditProc);
После удаления этого вызова Уникод в RichEdit отображается правильно (при выполнении некоторых условий, которые названы в предыдущих постах).
EditProc ничего существенного не выполняла, я её безболезненно удалил.