комбо и кириллица

Тема в разделе "WASM.WIN32", создана пользователем cresta, 23 окт 2005.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Есть структура и переменная
    Код (Text):
    1.     typedef struct RuDataStruct {
    2.         LPVOID          baseAddr;
    3.         LPVOID          letters[33];  //
    4.     }RuDataStruct;
    5.     RuDataStruct    RuData;




    Читаю файл-словарь (текст на русском), и определяю адреса, с которых начинаются новые буквы по алфавиту, занося эти адреса в RuData.letters. После заполнения массива адресов пытаюсь добавить строки с этих адресов в комбобокс:


    Код (Text):
    1.     for ( int i=0; i<33; i++ )
    2.     {
    3.         RtlMoveMemory (buffer, RuData.letters[i], 10);  //кусок строки в буфер
    4.         buffer[10] = 0;
    5.         MessageBox (NULL,buffer, NULL, NULL);           //проверяю - строка в буфере
    6.         SendMessage ( hCombo, CB_ADDSTRING, NULL, (LPARAM) buffer );
    7.     }
    8.  




    Строки в MessageBox отображаются нормально, а в комбо не добавляются.

    В то же время, если этим же алгоритмом добавлять в комбо не русские, а английские строки, то они в комбо добавляются. Также добавляется и строка, заданная непосредственно:
    Код (Text):
    1. SendMessage ( hCombo, CB_ADDSTRING, NULL, (LPARAM) "Строка" );




    В чем тут проблема?
     
  2. Twilight

    Twilight New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2005
    Сообщения:
    6
    а что говрит GetLastError()?

    Также неплохо бы инициализировать buffer перед каждым использованием.
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    SendMessage не взводит GetLastError.

    Что подразумевается под "инициализировать буфер"?
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    cresta

    1. Загрузить прогу в Olly.

    2. Поставить бряк на SendMessage.

    3. Посмотреть на содержимое buffer.



    Потом вместо buffer подсунуть константную строку и повторить п1-3. Сравнить. Вот и всё.
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Может виндовые прибамбасы с locale или юникодом при использовании стилей CBS_SORT или CBS_LOWERCASE\UPPERCASE ?
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    С locale это не связано, проверял. Рыться отладчиком в недрах RtlMoveMemory сейчас некогда, думал может кто-нибудь с подобным встречался. А пока просто
    Код (Text):
    1. for (int j=0; j<10; j++)
    2.     buffer[j] = *((char*) ((int)RuData.letters[i]+j));
    3. buffer[10] = 0;
     
  7. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Что значит - "просто" ? Просто заменил и все стало нормально ?
     
  8. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Именно :)