Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UNICODE, Проблема с отображением 
V
    Опции темы
dix75
Дата 19.9.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



Добрый день!

Создаю я комбобох.

Добавляю в него строки (Отображаются кракозябры)

Код

SendMessage(hwnd,(UINT) CB_ADDSTRING,(WPARAM) 0,(LPARAM) L"Ä ä");


А так нормально
Код

MessageBox(0L, (LPCWSTR) L"Ä ä", TEXT("Item Selected"), MB_OK);  


В чем может быть дело и как исправить?


--------------------
save your mind
PM MAIL   Вверх
dix75
Дата 19.9.2011, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



Похоже нужно послать сообщение CB_SETLOCALE
Но где можно узнать идентификатор локали например для китая


--------------------
save your mind
PM MAIL   Вверх
586
Дата 19.9.2011, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



пиши так:
Код
SendMessage(hwnd,(UINT) CB_ADDSTRING,(WPARAM) 0,(LPARAM) TEXT("Ä ä"));


Цитата(dix75 @  19.9.2011,  13:50 Найти цитируемый пост)
А так нормально
Код
MessageBox(0L, (LPCWSTR) L"Ä ä", TEXT("Item Selected"), MB_OK);
  

Так вообще-то тоже не нормально. Нужно так:
Код
MessageBox(0L, TEXT("Ä ä"), TEXT("Item Selected"), MB_OK);


Цитата(dix75 @  19.9.2011,  14:19 Найти цитируемый пост)
Похоже нужно послать сообщение CB_SETLOCALE

Дело не в локале, а в юникоде. Существует две функции - SendMessageA и SendMessageW.
PM   Вверх
dix75
Дата 19.9.2011, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



586, 
Ну проект в Unicode.
Поэтому макрос TEXT("dd") раскрывается в L"dd"

Но проблема не решается. 



--------------------
save your mind
PM MAIL   Вверх
586
Дата 19.9.2011, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



А должно работать. Может у тебя шрифт не тот? У меня всё работает.

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  12.PNG 66,06 Kb
PM   Вверх
dix75
Дата 20.9.2011, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



586, 
да, ты был прав.
мне помогло вот это.

Код

lf.lfCharSet = CHINESEBIG5_CHARSET;



Я вот не пойму почему а COMBOBOX не работает BACKSPACE?
Это можно как нибудь исправить


--------------------
save your mind
PM MAIL   Вверх
586
Дата 20.9.2011, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Код
#define UNICODE
#define _UNICODE
#include <windows.h>
#include <tchar.h>

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_CLOSE:
        DestroyWindow(hWnd);
        return 0;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASS wc = {0};
    wc.lpfnWndProc = MainWndProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
    wc.lpszClassName = _T("testwndclass");
    RegisterClass(&wc);

    HWND hWndApp=CreateWindowEx(0, wc.lpszClassName, _T("testapp"),
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        200, 200, 290, 240, NULL, NULL, hInstance, 0);

    HWND hWndCB = CreateWindowEx(0, _T("ComboBox"), _T("blablabla"),
        WS_CHILD | WS_VISIBLE | CBS_DROPDOWN,
        5, 5, 100, 200, hWndApp, (HMENU)10, hInstance, 0);

    LOGFONT lf = {0};

    HDC hdc = GetDC(hWndCB);
    lf.lfHeight = -MulDiv(10, GetDeviceCaps(hdc, LOGPIXELSY), 72);
    ReleaseDC(hWndCB, hdc);
    _tcscpy(lf.lfFaceName, _T("Arial Unicode MS"));

    HFONT hf = CreateFontIndirect(&lf);

    SendMessage(hWndCB, WM_SETFONT, (WPARAM)hf, (LPARAM)TRUE);

    SendMessage(hWndCB, CB_ADDSTRING, 0, (LPARAM)_T("item 1"));
    SendMessage(hWndCB, CB_ADDSTRING, 0, (LPARAM)_T("\u60A8\u597D"));
    SendMessage(hWndCB, CB_ADDSTRING, 0, (LPARAM)_T("item 2"));
    SendMessage(hWndCB, CB_ADDSTRING, 0, (LPARAM)_T("item 3"));
    SendMessage(hWndCB, CB_ADDSTRING, 0, (LPARAM)_T("item 4"));

    MSG msg;
    while(GetMessage(&msg, 0, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

это работает?

Это сообщение отредактировал(а) 586 - 20.9.2011, 00:31
PM   Вверх
dix75
Дата 20.9.2011, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



586, да
Только я еще добавил 
Код

lf.lfCharSet = CHINESEBIG5_CHARSET;



--------------------
save your mind
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.