Как изменить шрифт при рисовании в клетках таблицы?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 12.01.21 09:51
Оценка:
Есть таблица 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 с определенными параметрами. Вся текстовая информация выводится в таблицу, вся графика рисуется в таблице, но шрифт для текста какой был по умолчанию, такой и остается. Как сделать так, чтобы текст в таблице выводился нужным мне шрифтом?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.