Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Мобильные платформы > Windows CE
Перезагрузить страницу Опять Юникод, страшный unsigned short*, MessageBox
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
DUK DUK вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.09.2007
По умолчанию Опять Юникод, страшный unsigned short*, MessageBox - 18.09.2007, 21:02

Вроде все темы форума просмотрел, ссылки просмотрел, но все равно непонятно:

1. Как в текст MessageBox-а вставить переменную?
то, что для выдачи статичного текста написать что то типа
Код:
MessageBox(_T("Текст сообщения"), _T("Заголовок сообщения"),MB_OK);
это понятно, но как быть, если надо выдать текст типа "Порт СОМ1 открыт", где "СОМ1" - значение некоторой текстовой переменной.
На писюке это решалось просто (один из вариантов):
Код:
CString sText, sPort;
sText="Порт ";
sPort="COM1";
sText += sPort;
sText += " открыт";
MessageBox(sText, "Ошибка",...
т.е. как такое реализовать для КПК?

2. Как нормально, по русски считать символ из файла в кодировке Win-1251 (это как данность)?
Для писюка делел следующим образом (необходимо было считывать побайтно):

Код:
    CString CurrentString="",
            ...
    char CurrentChar,
                        ...
        UINT nBytesRead; //почему UINT - уже не помню :-) 

...

        nBytesRead=hFile.Read(&CurrentChar,1);

        if (nBytesRead==1)
        {// байт прочитан
            if ((CurrentChar != 0x0D) && (CurrentChar != 0x0A))
            {//байт - не конец строки
                CurrentString += CurrentChar;    //добавляем текущий символ (байт) к строке
...
все работает нормально, а в eVC подставляет кроказябры.
Т.е. допустим первый прочитанный символ - восклицательный знак, CurrentString пустой, после команды CurrentString += CurrentChar;
CurrentString становится равным "!", второй символ должен быть "Ф", считываем его, в окне отладки отображается CurrentChar - 212 "Ф",
а после команды CurrentString += CurrentChar; CurrentString становится равным "!О" (причем непонятно, что за "О" такая, с крышечкой, галочкой,
или еще какая ).

Если написать CurrentString += _T("Ф");, то, естественно, все работает.

Как это победить? Ну не могу я найти функции преобразования, уж извините, и помогите, плизззз!!!
Ответить с цитированием
  (#2 (permalink)) Старый
Narwal Narwal вне форума
Member
 
Сообщений: 1,039
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.10.2003
По умолчанию 19.09.2007, 01:38

Цитата:
Ну не могу я найти функции преобразования, уж извините, и помогите, плизззз!!!
MultiByteToWideChar и WideCharToMultiByte

CString, насколько я помню, внутри хранит char, если UNICODE не определено, и wchar_t в противном случае.
В WinCE все функции Windows работают только с юникодом.
Ответить с цитированием
  (#3 (permalink)) Старый
DUK DUK вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.09.2007
По умолчанию 19.09.2007, 17:35

Цитата:
MultiByteToWideChar и WideCharToMultiByte
Спасибо, попробую.
Ответить с цитированием
  (#4 (permalink)) Старый
DUK DUK вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.09.2007
По умолчанию 20.09.2007, 17:39

Я тут вот что подумал: а может это глюки английского эмулятора? Т.е. все работает как надо . Просто прочитал Рихтера, "Программирование для профессионалов", и "PocketPC. Руководство разработчика", вернее просмотрел главы по Юникоду - стало еще более непонятнее . Если без преобразований, как на втором листинге первого сообщения, то вместо русских букв в появляются квадратики, если делать преобразование по примеру из книги Рихтера:
Цитата:
WCHAR szW[100]; // строковый буфер в Unicode
// преобразуем строку из ANSI в Unicode
swprintf(szW, L"%S", "ANSI Str");
то вместо одного квадратика для каждой русской буквы появляются два квадратика. Латинские символы и цифры отображаются без проблем.
Вообщем либо я вообще ничего не понимаю, либо ... одно из трех
Подскажите как переделать код. CurrentString из моего листинга должен попадать в комбобокс на русском!!!

а с первым вопросом разобрался, чисто случайно, разыскивая другую инфу, наткнулся на пример
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Самый страшный Вирус NeloS Антивирусы 31 02.08.2010 01:04
Как сделать, чтобы тип unsigned был по умолчанию alexu C++ Builder 1 19.09.2009 14:02
Как поставить нужный юникод amorphius Perl 3 09.05.2009 16:59
Опять пролог! ОПЯТЬ СПИСКИ! Kate&Lena Prolog 10 26.02.2009 08:39
Ручная вставка символов юникод Diver2 Вопросы начинающих программистов 9 13.09.2008 14:35
Нужно создать программу на Delphi отображающую Юникод mauar Pascal 0 18.05.2008 06:29
Вывести юникод-символ Madgeniy Delphi 1 08.10.2007 23:14
Unsigned int h_len:4; // length of the header что это такое AKyJIA Visual C++ 2 28.02.2006 17:58
Опять списки, и опять на SWI. ler Prolog 3 02.02.2006 07:32
Получить указатель типа unsigned short * на char-массив? kim_tmn С/С++ 2 02.09.2005 08:30
юникод Вован PHP 1 17.11.2004 18:57
Преобразование типов, unsigned char mybyte Dim1 Вопросы начинающих программистов 3 04.11.2003 20:05



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов