void CMyListCtrl::PreSubclassWindow()
{
pBrush = new CBrush(RGB(128,128,128));
LOGFONT lf;
memset(&lf.0,sizeof(LOGFONT));
lf.lfHeight = 10;
lf.lfWidth = 6;
lf.lfWeight = FW_NORMAL;
wcscpy(lf.lfFaceName,L"MS Sans Serif");
m_MyFont.CreateFontIndirect(&lf);
CListCtrl::PreSubclassWindow();
}
void CMyListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
int i, n;
CRect rect, rect2, rect3;
cellinfo mycellinfo;
CString myString;
NMLVCUSTOMDRAW* pLVCustomDraw = reinterpret_cast(pNMHDR);
NMCUSTOMDRAW pLV = (NMCUSTOMDRAW)pLVCustomDraw->nmcd;
*pResult = CDRF_DODEFAULT;
switch (pLVCustomDraw->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult |= CDRF_NOTIFYITEMDRAW;
break;
case ITEMPREPAINT:
SelectObject(pLVCustomDraw->nmcd.hdc,m_MyFont);
if (typeofdraw==1)
{
n = pLVCustomDraw->nmcd.dwItemSpec;
myStringm = GetItemText(n,0);
if (myString!=L"")
{
GetSubItemRect(n,0,LVIR_LABEL,rect3);
SetItemText(n,0,L"");
GetDC()->TextOut(rect3.left+3,rect3.top+1,myString);
}
if (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 + 2;
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 + 2;
GetDC()->FillRect(&rect2,pBrush);
}
if (mycellinfo.cellstate==3)
{
rect2.top = rect.top + 2;
rect2.bottom = rect.bottom + 2;
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 + 2;
rect2.left = rect.left + mycellinfo.beginpos;
rect2.right = rect.left + mycellinfo.endpos;
GetDC()->FillRect(&rect2,pBrush);
}
}
}
break;
}
}