|
3驿站币
- void CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
- {
- // TODO: 添加您的代码以绘制指定项
- //CDC * pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
- if (lpDrawItemStruct->itemAction&ODA_DRAWENTIRE)
- {
- CDC pDC;
- pDC.Attach(lpDrawItemStruct->hDC);
- int red = 125, green = 50, black = 68;
- CPen pen;
- pen.CreatePen(PS_DASH, 0.8, RGB(255, 255, 255));
- CBrush brush;
- CHeaderCtrl *m_header;
- m_header = GetHeaderCtrl();
- CRect rc;
- pDC.SelectObject(&pen);
- pDC.SetBkMode(TRANSPARENT);
- CString s;
- int j;
- for (int i = 0; i < m_header->GetItemCount(); i++)
- {
- brush.CreateSolidBrush(RGB(red, green, black));
- pDC.SelectObject(&brush);
- if (lpDrawItemStruct->itemState&ODS_SELECTED)
- {
- if (i == m_sub)
- {
- brush.Detach();
- brush.CreateSolidBrush(RGB(250, 0, 0));
- pDC.SelectObject(&brush);
- }
- else
- {
- brush.Detach();
- brush.CreateSolidBrush(RGB(0, 250, 0));
- pDC.SelectObject(&brush);
- }
- }
- if (i == 0)
- {
- GetSubItemRect(lpDrawItemStruct->itemID, 1, LVIR_BOUNDS, rc);
- rc.right = rc.left;
- rc.left = lpDrawItemStruct->rcItem.left;
- }
- else
- GetSubItemRect(lpDrawItemStruct->itemID, i, LVIR_BOUNDS, rc);
- j = pDC.Rectangle(rc);
- brush.Detach();
- s = GetItemText(lpDrawItemStruct->itemID, i);
- if (i == 0)
- {
- rc.left -= GetScrollPos(SB_HORZ);
- }
- if (lpDrawItemStruct->itemID == 0)
- {
- rc.top -= GetScrollPos(SB_VERT)*m_height;
- }
- j = pDC.DrawText(s, rc, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
- red += 10;
- green += 15;
- black += 21;
- if (red>255)
- red = 0;
- if (green> 255)
- green = 0;
- if (black> 255)
- black = 0;
- }
- pen.Detach();
- brush.Detach();
- pDC.DeleteDC();
- }
- }
复制代码
我想自己写CListCtrl类,通过DrawItem来绘制控件,以上是代码,在运行时item为0的那一行正常绘制,当其他行绘制时执行pDC.Rectangle(rc)返回的是0,还有pDC.DrawText(s, rc, DT_SINGLELINE | DT_VCENTER | DT_CENTER)返回也是0,真是费解,请高手指点。 |
上一篇: 可不可以在ubuntu下生成c的dll扩展,然后在windows下供php调用这个dll扩展啊下一篇: 字符转换问题
|