Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   CList (http://forum.oszone.net/showthread.php?t=29786)

Guest 16-04-2004 18:16 205792

турецкие буквы нормально видны на edit а на liste выходят
другие символы.
что делать?
язык, фонт ит.д. параметры все на турецком

hasherfrog 17-04-2004 12:27 205793

У меня такой прикол был с русским текстом, когда я утанавливал свой шрифт для CList. Причем под win9x все отображалось нормально, а под 2k рисовались крякозябли. Я это победил каким-то параметром в то ли в конструкторе шрифта, то ли ... блин, не помню сейчас. Если не горит, я посмотрю к понедельнику.

hasherfrog 23-04-2004 08:25 205794

Уффф, еле откопал решение той своей проблемы. Извините за задержку.
Код:


if (_winver == 1034)
    ViewFont.CreateFont(14, 0, 0, 0, 400, 0, 0, 0, 204, 3, 2, 1, 49, "Courier New");
else
    ViewFont.CreateFont(14, 0, 0, 0, 400, 0, 0, 0, 0, 3, 2, 1, 49, "Courier New");

Обратите внимание на замену CharSet с 0 на 204. ИМХО, Вам следует сделать что-то похожее. Для этого будем исходить из того, что в системе есть нужный Вам шрифт (он же есть в CEdit). При создании CList, значение CharSet по умолчанию (т.е. 0) дает некорректное отображение шрифта. Надо найти все возможные CharSet'ы и выбрать нужный. Для этого проведём нумерацию шрифтов.
Код:

...
//Где-то в файле-имплементейшене Вашей формы CSomeMyDlgWithCList
...
int CALLBACK FontFunc(
    const LOGFONT *lplf,     // pointer to logical-font data
    const TEXTMETRIC *lptm,  // pointer to physical-font data
    DWORD dwType,            // font type
    LPARAM lpData            // pointer to application-defined data
)
{
    if (lplf && (strcmp(lplf->lfFaceName, "Courier New") == 0) {
        acutPrintf("\n");
        acutPrintf("%i\n", lplf->lfHeight);
        acutPrintf("%i\n", lplf->lfWidth);
        acutPrintf("%i\n", lplf->lfEscapement);
        acutPrintf("%i\n", lplf->lfOrientation);
        acutPrintf("%i\n", lplf->lfWeight);
        acutPrintf("%i\n", lplf->lfItalic);
        acutPrintf("%i\n", lplf->lfUnderline);
        acutPrintf("%i\n", lplf->lfStrikeOut);
        acutPrintf("CharSet: %i\n", lplf->lfCharSet);
        acutPrintf("%i\n", lplf->lfOutPrecision);
        acutPrintf("%i\n", lplf->lfClipPrecision);
        acutPrintf("%i\n", lplf->lfQuality);
        acutPrintf("%i\n", lplf->lfPitchAndFamily);
        acutPrintf("%s\n", lplf->lfFaceName);
    }
    return 1;
}
...
BOOL CSomeMyDlgWithCScrollView::OnInitDialog()
{
    CFont FontOfCList;
   FontOfCList.CreateFont(14, 0, 0, 0, 400, 0, 0, 0, 0, 3, 2, 1, 49, "Courier New");
    m_SomeCList.SetFont(&FontOfCList, TRUE);
    ...
    HDC hdc = ::GetDC(m_hWnd); long Param = 0;
    EnumFonts(hdc, "Courier New", &FontFunc, Param);
    ...
}

После появления диалога на экране в stdout будут выведены все варианты начертания "Courier New". Простым перебором с записью перечисленных возможных CharSet в CreateFont добейтесь нужного (правильного) начертания. Надеюсь, я всё более-менее понятно объяснил. Только замените ещё acutPrintf на printf, что ли...

Guest 26-04-2004 08:05 205795

Спасибо!
  Но чарсет у меня поставлен правильно
  и проблема  не от этого.


Время: 17:14.

Время: 17:14.
© OSzone.net 2001-