Как отобразить unicode в Edit под Windows 98?
От: Anjey_Nimz  
Дата: 01.06.04 13:32
Оценка:
Здравствуйте.

Пишу программу на Visual C++.

Программа на русском (все надписи на кнопках, меню и т.п.), но иногда нужно выводить и некоторые греческие символы наряду с русскими/английскими (мю, дельта, омега).

Например, так:
"Конденсатор C1 = 0,100 ?F"
"?f = 5 Hz"
(извините, но, кажется, форум не поддерживает юникод. В первой строке вместо вопроса "мю", во второй — "дельта")

Как такой текст отобразить в контроле Edit?
Искал в MSDN, в интернете, но ничего похожего не нашёл.

Unicode в Windows 98 не поддерживается.

Я преобразовал UNICODE-значения этих символов в кодировку UTF-8 (с помощью WideSharToMultiByte, используя CP_UTF8)
    wchar_t ws[3];
    char mbs[6]; 
    const unsigned char s_m[] = {0xBC,0x03,0,0}; // 0x03BC - это символ мю в Unicode
    UINT CodePage = CP_UTF8;
    memcpy((void*)ws , s_m,sizeof(s_m));

    WideCharToMultiByte(
        CodePage,
        0,
        (wchar_t*)s_m,
        -1,
        mbs,
        6,
        NULL,
        NULL);
    SendMessage(::GetDlgItem(hDlg,IDC_EDIT_RESULTS),WM_SETTEXT,0,(LPARAM)mbs);

В результате mbs содержит {0xCE,0xBC,0}, но текст отображается как байты CE и BC в кодировке 1251 (что неудивительно).

Как я понимаю, надо как-то сменить CHARSET, но не понял, как установить именно UTF8.
Хотел использовать CreateFont, но в MSDN в описании параметра DWORD fdwCharSet этой функции UTF8_CHARSET нету.
там только такие
[msdn] ANSI_CHARSET
BALTIC_CHARSET
CHINESEBIG5_CHARSET
DEFAULT_CHARSET
EASTEUROPE_CHARSET
GB2312_CHARSET
GREEK_CHARSET
HANGUL_CHARSET
MAC_CHARSET
OEM_CHARSET
RUSSIAN_CHARSET
SHIFTJIS_CHARSET
SYMBOL_CHARSET
TURKISH_CHARSET
Korean Windows:
JOHAB_CHARSET
Middle-Eastern Windows:
HEBREW_CHARSET
ARABIC_CHARSET
Thai Windows:
THAI_CHARSET[/msdn]

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

Может ли как-то Windows вообще отображать multibyte-строки?
Подскажите, пожалуйста, с помощью каких функций это можно реализовать?

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.