Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.216.190.167] |
|
Сообщ.
#1
,
|
|
|
Есть таблица 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 с определенными параметрами. Вся текстовая информация выводится в таблицу, вся графика рисуется в таблице, но шрифт для текста какой был по умолчанию, такой и остается. Как сделать так, чтобы текст в таблице выводился нужным мне шрифтом? |
Сообщ.
#2
,
|
|
|
MFC
BEGIN_MESSAGE_MAP(CMainList, CMFCListCtrl) ON_NOTIFY_REFLECT_EX(NM_CUSTOMDRAW, &CMainList::OnNMCustomdraw) END_MESSAGE_MAP() afx_msg BOOL CMainList::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLVCUSTOMDRAW lplvcd = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR); int iRow = lplvcd->nmcd.dwItemSpec; int iCol = lplvcd->iSubItem; if (fnt != nullptr) { SelectObject(lplvcd->nmcd.hdc, fnt->operator HANDLE()); *pResult = CDRF_NEWFONT; } // if } |
Сообщ.
#3
,
|
|
|
Black Dragon, в приведённом Вами примере класс CMainList является потомком класса CMFCListCtrl.
А нельзя ли сделать так, чтобы этот класс CMainList являлся бы потомком класса CListCtrl, а не CMFCListCtrl? (А то у меня вся программа "заточена" под класс CListCtrl). |
Сообщ.
#4
,
|
|
|
class CMFCListCtrl : public CListCtrl
Добавляет управление заголовком... |
Сообщ.
#5
,
|
|
|
Black Dragon, и еще вопрос: что означает переменная fnt в приведенном Вами коде? Это указатель на тип CFont ?
|
Сообщ.
#6
,
|
|
|
erslgoeirjh
да |