Войти

Показать полную графическую версию : CList


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

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

hasherfrog
23-04-2004, 08:25
Уффф, еле откопал решение той своей проблемы. Извините за задержку.

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
Спасибо!
  Но чарсет у меня поставлен правильно
  и проблема  не от этого.




© OSzone.net 2001-2012