list 自画问题:没选中使用m_BrushNormal来显示各个项背景,选择的使用m_BrushSelected来画背景。
可是显示却不正常! 请帮看看原因。多谢!!!void CMyListBox::DrawItem(LPDRAWITEMSTRUCT lpDIS) 
{
// TODO: Add your code to draw the specified item
CDC* pDC = CDC::FromHandle(lpDIS->hDC); CRect rectFull(lpDIS->rcItem);
// icon and text rect
CRect rectIcon(rectFull.left,rectFull.top,rectFull.left+40,rectFull.top+40); 
CRect rectText(rectIcon.right,rectFull.top,rectFull.right,rectFull.bottom);
CExtItem* pItem = static_cast<CExtItem *>(GetItemDataPtr(lpDIS->itemID));
pDC->SetBkMode(TRANSPARENT); if ((lpDIS->itemAction | ODA_SELECT) && 
(lpDIS->itemState  & ODS_SELECTED)) 
{  CRect rect(rectFull); CPen  Pen(PS_SOLID,1,RGB(0,0,0)); // draw dotted frame 
CPen* pOldPen = pDC->SelectObject(&Pen);
pDC->Rectangle(rect);
pDC->SelectObject(pOldPen); rect.DeflateRect(1,1,1,1);
pDC->FillRect(rect,&m_BrushSelected);
if( m_bEdge )
pDC->DrawEdge(rect,EDGE_SUNKEN,BF_BOTTOM);
pDC->DrawIcon(rectIcon.left+2,rectIcon.top+2,pItem->m_hIcon);
pDC->SetTextColor(m_clrText); // selected text color
rect.CopyRect(rectText);
rect.DeflateRect(2,2);
rect.OffsetRect(2,10); // draw text
if( pItem->m_szItemName != NULL )
pDC->DrawText(pItem->m_szItemName,lstrlen(pItem->m_szItemName),
rect,DT_LEFT | DT_SINGLELINE);
}
else //if(lpDrawItemStruct->itemAction == ODA_DRAWENTIRE ) 
{
CRect rect(rectFull);
//pDC->FillSolidRect(rect,m_clrBg);
pDC->FillRect(rect,&m_BrushNormal);
if( m_bEdge )
pDC->DrawEdge(rect,EDGE_SUNKEN,BF_BOTTOM);
pDC->DrawIcon(rectIcon.left+2,rectIcon.top+2,pItem->m_hIcon);
//modifyed by chenxj 2009.9.17 添加查看过图标
if (bShowViewedItemIcon)
{ /* int index =lpDIS->itemID;
if(flglist[index]==1)
pDC->DrawIcon(rectIcon.left+2+50,rectIcon.top+2,pItem->m_hIcon);*/ } pDC->SetTextColor(RGB(0,0,0)); // unselected text color rect.CopyRect(rectText);
rect.DeflateRect(2,2);
rect.OffsetRect(2,10);
if( pItem->m_szItemName != NULL )
pDC->DrawText(pItem->m_szItemName,lstrlen(pItem->m_szItemName),
rect,DT_LEFT | DT_SINGLELINE);
}
     }