Страница 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 ничего существенного не выполняла, я её безболезненно удалил.