我已经在CListView中实现了自画功能,已经画出了线,但是在原区域重画该线,改变该线的颜色,可总也改变不了,不知道是怎么回事?高手请指点!
CPen Pen(PS_SOLID, 1, RGB(0,0,0)), *pOldPen;
CPen Pen2(PS_SOLID, 1, RGB(255,0,0));
pOldPen = pDC->SelectObject(&Pen);
开始的时候已经画出来了.当满足一个条件要改变该线颜色,
pOldPen = pDC->SelectObject(&Pen2);当选择这个时往原来的地方再画一下,颜色还是黑色,为什么?
CPen Pen(PS_SOLID, 1, RGB(0,0,0)), *pOldPen;
CPen Pen2(PS_SOLID, 1, RGB(255,0,0));
pOldPen = pDC->SelectObject(&Pen);
开始的时候已经画出来了.当满足一个条件要改变该线颜色,
pOldPen = pDC->SelectObject(&Pen2);当选择这个时往原来的地方再画一下,颜色还是黑色,为什么?
解决方案 »
- 如何在关闭A程序时自动启动B程序?
- 树控件的DeleteAllItems()问题
- CStdioFile file;下一次写入的时候,如何在保存当前内容的情况下添加内容,而不是覆盖
- 一个很菜的问题:关于openGL图形显示
- Windows操作系统原理(第2版)这本书怎么样?
- 简单实现,50分购买代码,先来先得
- 在CreateDialog()之后,为何会收到WM_DESTROY消息?
- ■■【绝对有趣,up有分,谢谢关注】请问win98的Explorer.exe的运行机制■■
- 当在鼠标右键按下去时用GetClaaaLong改变光标
- 在对话框中可以调多个数据库吗,并对其操作
- Release版本上,关闭程序时的错误.
- 有关分割条的问题.
{
CListCtrl& m_ListCtrl = GetListCtrl();
CString str,sTextTwo;
CRect rcItem(lpDrawItemStruct->rcItem);
CRect RectOne,RectTwo,RectThr,RectFour,RectFive,r;
int nCount = m_RecvIP.size();
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
int nSavedDC = pDC->SaveDC();
CPen Pen(PS_SOLID, 1, RGB(0,0,0)), *pOldPen;
CPen Pen2(PS_SOLID, 1, RGB(255,0,0));
pOldPen = pDC->SelectObject(&Pen);
pDC->SelectStockObject(NULL_BRUSH); int nItem = lpDrawItemStruct->itemID;
LVITEM item;
ZeroMemory ( &item, sizeof(LVITEM) );
item.iItem = nItem;
item.iSubItem = 0;
item.mask = LVIF_IMAGE|LVIF_STATE;
item.stateMask = 0XFFFF; m_ListCtrl.GetItem(&item);
BOOL bSelected = item.state&LVIS_SELECTED; COLORREF color=::GetSysColor(COLOR_WINDOW);
DWORD dw = m_ListCtrl.GetItemData(nItem) ;
DrawLine(pDC,m_ListCtrl,nItem,nCount,dw); DrawClickColor(pDC,m_ListCtrl,nItem,bSelected); ChangeLineColor(pDC,m_ListCtrl,nItem,dw); //draw arrow
ARROWSTRUCT a;
CBrush br1, br2, *pbrOld;
br1.CreateSolidBrush(RGB(0,0,0));
br2.CreateSolidBrush(RGB(255,0,0));
pbrOld = pDC->SelectObject(&br1);
//setup arrows
a.nWidth = 10;
a.fTheta = 0.5f;
a.bFill = true; PaintArrow(pDC, m_ListCtrl,a,nCount);
pOldPen = pDC->SelectObject(&Pen2);
pbrOld = pDC->SelectObject(&br2);
if(dw == ITEMCOLOR_CHANGE_ONE)
{
PaintArrowColor(pDC,m_ListCtrl,a,nCount,nItem);
color=::GetSysColor(COLOR_HIGHLIGHT);
}
else
{
pDC->SetBkColor(color);
pDC->SetTextColor(RGB(0,0,0));
}
}void CDiameterLogWndOne::DrawLine(CDC *pDC,CListCtrl &m_ListCtrl, int nItem,int nCount,int dw)
{
CRect RectOne,RectTwo,RectThr;
CPen Pen2(PS_SOLID, 1, RGB(255,0,0)),Pen(PS_SOLID, 1, RGB(0,0,0)), *pOldPen;
m_ListCtrl.GetItemRect ( nItem, RectOne, LVIR_LABEL );
CString sTextOne = m_ListCtrl.GetItemText ( nItem, 0);
if(!sTextOne.IsEmpty() && sTextOne.GetLength() != 0)
{
pDC->DrawText(sTextOne,RectOne,DT_END_ELLIPSIS | DT_LEFT );
}
else
{
pDC->DrawText(_T(""),RectOne,DT_END_ELLIPSIS | DT_LEFT );
} if(nItem > 1)
{
pDC->MoveTo(RectOne.left + LINE_VERTLINE, RectOne.top);
pDC->LineTo(RectOne.left + LINE_VERTLINE, RectOne.bottom);
}
for(int i = 0 ; i < nCount ; i ++)
{
m_ListCtrl.GetSubItemRect(nItem,i+2,LVIR_LABEL,RectTwo);
CString sText = m_ListCtrl.GetItemText ( nItem, i+2);
if(!sText.IsEmpty() && sText.GetLength() != 0)
{
pDC->DrawText(sText,RectTwo,DT_END_ELLIPSIS | DT_LEFT );
}
if(nItem > 1)
{
pDC->MoveTo(RectTwo.left + LINE_VERTLINE, RectTwo.top);
pDC->LineTo(RectTwo.left + LINE_VERTLINE, RectTwo.bottom);
}
}
m_ListCtrl.GetSubItemRect(nItem,1,LVIR_LABEL,RectThr);
CString sTextTwo = m_ListCtrl.GetItemText ( nItem, 1);
if(!sTextTwo.IsEmpty() && sTextTwo.GetLength() != 0)
{
pDC->DrawText(sTextTwo,RectThr,DT_END_ELLIPSIS | DT_CENTER );
}
for(i = 4 ; i < m_nCount ; i = i + 4)
{
m_ListCtrl.GetSubItemRect(i,1,LVIR_LABEL,RectThr);
pDC->MoveTo(RectThr.left, RectThr.bottom);
pDC->LineTo(RectThr.right,RectThr.bottom);
}
//draw line
for(i = 4 ; i < m_nCount ; i = i + 4)
{
m_ListCtrl.GetSubItemRect(i,1,LVIR_LABEL,RectThr);
pDC->MoveTo(RectThr.left, RectThr.bottom);
pDC->LineTo(RectThr.right,RectThr.bottom);
}
}void CDiameterLogWndOne::ChangeLineColor(CDC *pDC, CListCtrl &m_ListCtrl, int nItem, int dw)
{
CRect RectThr;
CString sTextTwo;
CPen Pen2(PS_SOLID, 1, RGB(255,0,0)), *pOldPen;
COLORREF color=::GetSysColor(COLOR_WINDOW);
if(dw == ITEMCOLOR_CHANGE)
{
//change line color
pOldPen = pDC->SelectObject(&Pen2);
//pDC->SetBkColor(TRANSPARENT);
m_ListCtrl.GetSubItemRect(nItem,1,LVIR_LABEL,RectThr);
pDC->FillSolidRect(RectThr,RGB(255,255,255));
//in the same area draw red line,but not work?why?
pDC->MoveTo(RectThr.left, RectThr.bottom);
pDC->LineTo(RectThr.right,RectThr.top);
pDC->SetBkColor(RGB(255,255,255));
pDC->SetTextColor(RGB(255,0,0));
m_ListCtrl.GetSubItemRect(nItem,1,LVIR_LABEL,RectThr);
CString sTextTwo = m_ListCtrl.GetItemText ( nItem, 1);
if(!sTextTwo.IsEmpty() && sTextTwo.GetLength() != 0)
{
pDC->DrawText(sTextTwo,RectThr,DT_END_ELLIPSIS | DT_CENTER );
}
color=::GetSysColor(COLOR_HIGHLIGHT);
}
else
{
pDC->SetBkColor(color);
pDC->SetTextColor(RGB(0,0,0));
} if(dw == ITEMCOLOR_CHANGE_TWO)
{
pDC->SetBkColor(RGB(255,255,255));
pDC->SetTextColor(RGB(255,0,0));
m_ListCtrl.GetSubItemRect(nItem,1,LVIR_LABEL,RectThr);
sTextTwo = m_ListCtrl.GetItemText ( nItem, 1);
if(!sTextTwo.IsEmpty() && sTextTwo.GetLength() != 0)
{
pDC->DrawText(sTextTwo,RectThr,DT_END_ELLIPSIS | DT_CENTER );
}
color=::GetSysColor(COLOR_HIGHLIGHT);
}
else
{
pDC->SetBkColor(color);
pDC->SetTextColor(RGB(0,0,0));
}
}代码在上面, Mackz请指教!