Для комбобокса: возможно размер шрифта больше размера айтема комбобокса - происходит затирание части текста соседним айтемом.programisto писал(а): съедает значок над буквой. Тот же фонт при помощи TextOutW выводится правильно.
Хвалёный Уникод не работает
Модераторы: Duncon, Hawk, Romeo, Eugie
-
- Сообщения: 12
- Зарегистрирован: 11 авг 2009, 16:24
He похоже. Заглавные буквы не обрезает.Albor писал(а):Для комбобокса: возможно размер шрифта больше размера айтема комбобокса - происходит затирание части текста соседним айтемом.
B Richedit тоже неправильно показывает Уникод.
У меня впечатление - Уникод работает только в TextOut
-
- Сообщения: 12
- Зарегистрирован: 11 авг 2009, 16:24
Вот что накопал в Инете:Decoder писал(а):Наверно caм что-то делаешь неправильно.
Обратите внимание, что стандартные компоненты не могут работать с юникод строками! Правильно отображать UNICODE строки, даже после всех необходимых перекодировок, могут
•только контролы, которые написаны специальным образом,
•контролы с установленными UNICODE шрифтами.
Но подробнее ничего нет.
Честно говоря, у меня вызывает сомнение надёжность такого источника информации. Возможно подобное утверждение было актуально для Windows 95/98.
Достаточно открыть MSDN и найти там справку по сообщению CB_ADDSTRING.
Вoт как описываются параметры функции SendMessage для данного сообщения:
Тип LPCTSTR говорит о том, что строка может передаваться как в кодировке ANSI, так и в UNICODE, в зависимости от текущих настроек проекта.
Достаточно открыть 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]
Поумнеть несложно, куда труднее от дури избавиться.
-
- Сообщения: 12
- Зарегистрирован: 11 авг 2009, 16:24
Проблема для Richedit решена. Ошибка была в том, что для Richedit была определена оконная процедура. После удаления оконной процедуры всё заработало как нужно. Решение подсказали на венгерском форуме.Decoder писал(а):Честно говоря, у меня вызывает сомнение надёжность такого источника информации. Возможно подобное утверждение было актуально для Windows 95/98.
Достаточно открыть MSDN и найти там справку по сообщению CB_ADDSTRING.
Вoт как описываются параметры функции SendMessage для данного сообщения:Тип LPCTSTR говорит о том, что строка может передаваться как в кодировке ANSI, так и в UNICODE, в зависимости от текущих настроек проекта.Код: Выделить всё
[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]
Не очень понятно. Можно поподробнее? Что значит "была определена" и "удалена"? Ведь у каждого окна существует обработчик событий, т.е. "оконная процедура". Как же без нее?programisto писал(а):Проблема для Richedit решена. Ошибка была в том, что для Richedit была определена оконная процедура. После удаления оконной процедуры всё заработало как нужно. Решение подсказали на венгерском форуме.
-
- Сообщения: 12
- Зарегистрирован: 11 авг 2009, 16:24
Я не вполне корректно выразился, была определена процедура редактирования следующим образом:
SetWindowLong(hWndRichEdit,GWL_WNDPROC, pEditProc);
После удаления этого вызова Уникод в RichEdit отображается правильно (при выполнении некоторых условий, которые названы в предыдущих постах).
EditProc ничего существенного не выполняла, я её безболезненно удалил.
SetWindowLong(hWndRichEdit,GWL_WNDPROC, pEditProc);
После удаления этого вызова Уникод в RichEdit отображается правильно (при выполнении некоторых условий, которые названы в предыдущих постах).
EditProc ничего существенного не выполняла, я её безболезненно удалил.