Форум

"В гостях у Доныча"

Дружественные форумы:
АвторСообщение



ссылка на сообщение  Отправлено: 24.08.04 20:27. Заголовок: C++ MFC


Вопрос достаточно специфического плана, но в тоже время есть неплохие шансы, что тот кто приграмировал/ет под MFC знает ответ. Но тем кто не сталкивался, даже не читайте, вопрос достаточно специфического свойства.

У вас есть класс типа CListCtrl. Этот класс один из способов работы с View List, то есть отображать данные на экран.
Все бы ничего, да вот в Unicode проблемки. Я выцарапаю кусочки релевантого кода так будет наглядней.


CListCtrl m_listData; // обьявлен класс типа CListCtrl
CString strData; // Обьявлена переменна типа Стринг, причем проект скомпилирован с флагом Юникод.


Check = ListView_GetUnicodeFormat(HWND(m_listData)); // Я просто думал что может Юникод мод не установлен,
// поэтому позвонил в эту функцию проверить. Check = 1,
// что говорит о том что ресурс работает в юникоде.

m_listData.SetItem(nRow, nField, LVIF_TEXT,strData, -1, 0, 0, 0); // Это сам звонок в функцию которая выводит на экран

Это то что сидит в переменной strData перед посылкой в печать:

+strData {0x003ab938 «Сука1»} ATL::CStringT‹unsigned short,StrTraitMFC‹unsigned short,ATL::ChTraitsCRT‹unsigned short› › ›

как видите слово «Сука1» в юникоде очень сладко так сидит.

А в окне вывода я вижу вместо кирилицы вертикальные палки. Любое слово
на латинском конечно печатает, цифры печатает, русские буквы не печатает.








Спасибо: 0 
Цитата Ответить
Ответов - 12 [только новые]





ссылка на сообщение  Отправлено: 24.08.04 20:33. Заголовок: Re: C++ MFC


Жора, проверь свою среду разработки на наличие матофильтра. Я думаю, дело в нем.

А если серьезно, то я не знаю в чем дело. Постучись Шурику ЦЦ в приват на ВСК-форуме и дай ссылку на эту ветку. Может поможет.


Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 24.08.04 20:44. Заголовок: Re: Доныч




Да я сначала вежливые слова писал, у меня любимая тест-переменная - «Жопа» :), это потом уже на мат перешел, от отчаяния :)

Шура ЦЦ мне точно поможет, сначала удавит, потом поможет :)

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 24.08.04 21:07. Заголовок: Re: C++ MFC


Giora пишет:
цитата
Шура ЦЦ мне точно поможет, сначала удавит, потом поможет :)


Главное - результат.

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 24.08.04 21:46. Заголовок: Re: C++ MFC


Покопай эту функцию:

SetLocaleInfo
The SetLocaleInfo function sets an item of locale information. This setting only affects the user override portion of the locale settings; it does not set the system defaults.
BOOL SetLocaleInfo(
LCID Locale ‹›, // locale identifier
LCTYPE LCType ‹›, // information type
LPCTSTR lpLCData ‹› // information buffer
);
Parameters
Locale
[in] Specifies the locale whose information the function will set. The locale provides a context for the string mapping or sort key generation. An application can use the MAKELCID ‹nls_7qck.htm› macro to create a locale identifier.
LCType
[in] Specifies the type of locale information to be set by the function. Note that only one LCTYPE may be specified per call. Not all LCTYPE values are valid; see the list of valid LCTYPE values in the following Remarks section.
lpLCData
[in] Pointer to a null-terminated string containing the locale information the function will set. The information must be in the specified LCTYPE’s particular format.

Русская локаль: 0x0419


Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 24.08.04 21:50. Заголовок: Re: C++ MFC


Сейчас посмотрю, спасибо.


Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 25.08.04 00:19. Заголовок: Re: C++ MFC


Шура, я вставил вот такой код, но не помогает. То есть я сознательно сначала
получил из системы русски локале, так как она его видит ( на всякий случай), ну и потом установил его.

Что-то не правильно ?

И мне кажется что все это актуально когда ты работаешь с WIN API, я же работаю в MFC

Какого хрена я должен звонить в системные функции Виндов, когда я на целый уровень выше ?
MFC должен позаботиться обо мне и моих проблемах :)

LPTSTR Locale_Holder;
WORD LangID = MAKELANGID((USHORT)0x19, (USHORT)0x01);
WORD wSortId = SORT_DEFAULT;
DWORD Locale = MAKELCID(LangID, wSortId );

Check=GetLocaleInfo(Locale,LOCALE_ILANGUAGE,Locale _Holder,5);
SetLocaleInfo(Locale,LOCALE_ILANGUAGE,Locale_Holde r);





Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 25.08.04 00:23. Заголовок: Re: C++ MFC


Погоди, я посмотрел что SetLocaleInfo возвращает 0 - звонок с ошибкой, надо посмотреть почему.

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 25.08.04 00:43. Заголовок: Re: C++ MFC


Не знаю, по моему формат правильный, но звонок почему то не проходит.

Так тоже не проходит:

LPCTSTR Locale_Buf = _T(«0419»);
BOOL Check = SetLocaleInfo(Locale,LOCALE_ILANGUAGE,Locale_Buf);

возвращает 0.

Че ей надо ? :)

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 25.08.04 01:21. Заголовок: Re: C++ MFC


Попробуй сменить национальность. Если не получится, тогда попытайся думать.

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 25.08.04 13:52. Заголовок: Re: C++ MFC


Хамло ! Я тебе отвечу, в последний раз,
и только для того, чтобы показать тебе твою некомпетентность.
Причем слышишь ты это от инженера-электронщика, который
просто неплохо разбирается в программировании - вдвойне должно быть стыдно.

Функция SetLocaleInfo не может поменять установку языка, это и не ее задача.
Она может поменять формат текущего языка, например форму написания дат, денежных единиц,
и прочее.

Чтобы поменять язык, используется функция SetThreadLocale.
Эта функция меняет Локале для твоегo Threda, что в принципе
ты и посоветовал сделать.

Но ... : Если бы ты немножко разбирался в софте, ты бы понимал что менять Локале абсолютно ни к чему.
Твоя прога хочеть распечатать что-то ? Уникод - это таблица всех значков для всех языков. Выбираешь нужный значок-
печатаешь. Ты можешь одновременно печатать на 30 языках, не меняя никаких установок.

Доказать что я прав элементарно, в том же сегменте кода например ставится строчка:

MessageBox(strData,NULL,MB_OK );

И все печатается по русски на раз. В переменной StrData слово русскими буквами в формате уникода, и все.
Тут же можно на иврите и французком писать, элементарно.

Единственное, что я получил из нашего общения, это разобрался с функцией Set, Get Locale,
ну и понял также, какой ты некомпетентный пацан.

Можешь не отвечать, общаться с тобой за твое хамство больше никогда не буду.

Удачи ! :)


Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 25.08.04 17:42. Заголовок: Re: C++ MFC


Ну вот, пацан хоть в чем-то начал разбираться.. Но цель
цитата
общаться с тобой ... больше никогда не буду.

достигнута, и это радует.

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 16.11.04 21:52. Заголовок: Re: C++ MFC




Спасибо: 0 
Цитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



улыбка подмиг лепота смех гы язык печаль сердитость stud фи блым куку о май гот! хм.. них... маска нимб зеленое фе знайка влюбленность смущение шарик класс! браво хай трям моргалик ах ой грусть плач чхи тик фингал мля! х.з. бе-бе-бе валялсо учи матчасть Неа! Ни-ни! Акуеть! курим наушики молотком по жбану яхта дед мороз эврика crazy пацталом
Rambler's Top100