Winapi странные символы const char * - PullRequest
0 голосов
/ 06 мая 2018

Я работаю над проектом WinAPI в Visual Studio 2015 и при инициализации этого массива:

const char* Filtros[] = {
        "Media", "Media Ponderada", "Mediana", "Gaussiano",
        "Ecualización Simple", "Ecualización Unif.", "Suavizado Conservador", "Laplasiano"
    };

и связать его со списком:

CreateWindow(TEXT("COMBOBOX"), TEXT(""),
    CBS_DROPDOWNLIST | WS_VISIBLE | WS_CHILD,
    CB_x, CB_y, CB_width, CB_heigth,
    hwnd, (HMENU)CB_FILTROS, NULL, NULL);

for (int i = 0; i < nFiltros; i++) {
    SendDlgItemMessage(hwnd, CB_FILTROS, CB_ADDSTRING, 0, (LPARAM)Filtros[i]);
}
SendDlgItemMessage(hwnd, CB_FILTROS, CB_SETCURSEL, (WPARAM)3, (LPARAM)0);

Я получаю эти странные символы:

Strange chracters

В моем свойстве Proyect в наборе символов выбранная мною опция Использовать символ Unicode Set .

Я думаю, у этого должно быть действительно простое решение. Я буду рад за любое направление.

1 Ответ

0 голосов
/ 06 мая 2018

Текст ANSI / ASCII, интерпретируемый как Unicode / UTF-16LE , имеет тенденцию выглядеть как китайский .

Вы определили UNICODE в настройках своего проекта, поэтому CreateWindow и SendMessage будут Unicode, но вы передаете строки ANSI. Компилятор не может поймать это из-за приведения к Си.

Используйте LPCTSTR Filtros[] или const wchar_t* Filtros[] и TEXT("...") или L"...", чтобы сделать ваши строки Unicode.

Вы также можете сделать тип приведения безопасным, заменив (LPARAM)Filtros[i] на (LPARAM)const_cast<LPCTSTR>(Filtros[i]), и компилятор будет жаловаться, если вы передадите неверный тип строки ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...