Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2021, 10:42   #1
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию Как изменить шрифт при рисовании в клетках таблицы?

Есть таблица IDC_LIST1, которой соответствует переменная m_IDC_LIST1 типа CMyListCtrl5 (который является потомком класса CListCtrl). В этой таблице я вывожу текст и рисую графику в клетках таблицы.
Вот код:

Код:
class CMyListCtrl5 : public CListCtrlEx2
{
protected:
    void  OnPaint();
    void  PreSubclassWindow();
    CBrush *pBrush;
    CFont  m_MyFont;
    afx_msg void  OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
    DECLARE_MESSAGE_MAP()
public:
    CMyListCtrl5();
    int typeofdraw;
    int  cellwidth;
    std::vector<cellinfo>  cellattributes;
    std::vector<CString>  firstcolumntexts;
    void  setVisibilityZone(int countstr, long jtdate1, long double tjdate1, long jtdate2, long double tjdate2);
    void  insertRowOfCellInfo();
};
 
void  CMyListCtrl5::PreSubclassWindow()
{
    CListCtrl::PreSubclassWindow();
    pBrush = new CBrush(RGB(128,128,128));
    LOGFONT  lf;
    memset(&lf,0,sizeof(LOGFONT));
    lf.lfHeight = 8;
    lf.lfWidth = 4;                                            
    lf.lfWeight = FW_NORMAL;
    wcscpy(lf.lfFaceName,L"MS Sans Serif");
    m_MyFont.CreateFontIndirect(&lf);
    SetFont(&m_MyFont);
}
 
void  CMyListCtrl5::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
    int  i, n;
    CRect  rect, rect2, rect3, rect4;
    cellinfo  mycellinfo;
    LPCTSTR  pzText;
    CString  myString;
    CBrush *pBrush2;
 
    pBrush2 = new CBrush(RGB(255,255,255));
    NMLVCUSTOMDRAW* pLVCustomDraw = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
    NMCUSTOMDRAW  pLV = (NMCUSTOMDRAW)pLVCustomDraw->nmcd;
    *pResult = CDRF_DODEFAULT;
    switch (pLVCustomDraw->nmcd.dwDrawStage)
    {
    case CDDS_PREPAINT:
        *pResult |= CDRF_NOTIFYITEMDRAW;
        break;
    case CDDS_ITEMPREPAINT:
        {
        if (typeofdraw==1)
            {
            n = pLVCustomDraw->nmcd.dwItemSpec;
            myString = (CString)(firstcolumntexts.at(n));
            if (myString!=L"")
            {
            GetSubItemRect(n,0,LVIR_BOUNDS,rect);
            GetSubItemRect(n,0,LVIR_LABEL,rect3);
            GetDC()->TextOut(rect3.left+3,rect3.top-1,myString);
            }
            for (i=1; i<25; i++)
            {
            myString = GetItemText(n,i);
            if (myString!=L"")
            {
                             GetSubItemRect(n,i,LVIR_LABEL,rect3);
                 GetDC()->TextOut(rect3.left+3,rect3.top-1,myString);
            }
            GetSubItemRect(n,i,LVIR_BOUNDS,rect);
            mycellinfo = (cellinfo)(cellattributes.at(n*25+i));
            if (mycellinfo.cellstate==1)
            // если начало зоны видимости
            {
                  rect2.top = rect.top+2;
                      rect2.bottom = rect.bottom-1;
                  rect2.left = rect.left + mycellinfo.beginpos;
                  rect2.right = rect.right;
                  GetDC()->FillRect(&rect2,pBrush);
            }
            if (mycellinfo.cellstate==2)
            // если продолжение зоны видимости
            {
                  rect2.top = rect.top+2;
                  rect2.left = rect.left;
                  rect2.right = rect.right;
                  rect2.bottom = rect.bottom-1;
                  GetDC()->FillRect(&rect2,pBrush);
            }
            if (mycellinfo.cellstate==3)
            // если конец зоны видимости
            {
                  rect2.top = rect.top+2;
                  rect2.bottom = rect.bottom-1;
                  rect2.left = rect.left;
                  rect2.right = rect.left + mycellinfo.endpos;
                  GetDC()->FillRect(&rect2,pBrush);
            }
            if (mycellinfo.cellstate==4)
            // если начало и конец зоны видимости
            {
                  rect2.top = rect.top+2;
                  rect2.bottom = rect.bottom-1;
                  rect2.left = rect.left + mycellinfo.beginpos;
                  rect2.right = rect.left + mycellinfo.endpos;
                  GetDC()->FillRect(&rect2,pBrush);
            }
            }
        }
        }
        break;
    }
}
В этом коде я создаю шрифт m_MyFont с определенными параметрами. Вся текстовая информация выводится в таблицу, вся графика рисуется в таблице, но шрифт для текста какой был по умолчанию, такой и остается. Как сделать так, чтобы текст в таблице выводился нужным мне шрифтом?
erslgoeirjh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как избавиться от мерцания при рисовании по чужому окну Illusiony Мультимедиа в Delphi 10 03.11.2016 17:36
combobox - как при рисовании вручную перерисовать выбранный элемент Ilya48 C# (си шарп) 0 25.06.2012 15:42
Как изменить шрифт при наведении на ссылку webx WordPress и другие CMS 0 17.05.2011 11:08
Как изменить шрифт FIREVISTA Общие вопросы C/C++ 12 24.04.2010 19:08
Как изменить стиль шрифт выделенного тексту слова в компоненте RichEdit при выделении его? SkAndrew Общие вопросы Delphi 9 23.04.2008 01:35