hur.cn - 华软网

 热门搜索

ListBox的自绘逻辑问题

  作者:未知    来源:网络    更新时间:2011/9/29
ListBox的自绘逻辑

DrawItem函数

处理每一种报警信息,不同的报警信息用不同的颜色表示,主要是项的背景颜色


发现颜色不成功,只有一行 颜色改变。。其他不变。。。。 很奇怪,肯定是DrawText的逻辑上有问题


void CVTSListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
int category;   //报警级别

RECT rcItem;//项矩形
::CopyRect(&rcItem, &lpDrawItemStruct->rcItem);//拷贝矩形
HDC hDC = lpDrawItemStruct->hDC;//项HDC
CDC* pDC=CDC::FromHandle(hDC);


COLORREF crOldText = ::GetTextColor(hDC);
COLORREF crOldBk = ::GetBkColor(hDC);

HBRUSH hbrBkOld ;  //背景刷子

if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
(lpDrawItemStruct->itemState & ODS_SELECTED))
{
::SetTextColor(hDC, ::GetSysColor(COLOR_BTNHILIGHT));//高亮文本
::SetBkColor(hDC, ::GetSysColor(COLOR_HIGHLIGHT));//高亮文字背景
::FillRect(hDC, &rcItem, ::GetSysColorBrush(COLOR_HIGHLIGHT));//用高亮色填充项矩形
::DrawFocusRect(hDC, &rcItem);//画焦点矩形
//选中项的显示代码,如果有需要显示非文本的代码放于此


}
else
{
//HBRUSH hbrBkOld = ::CreateSolidBrush(crOldBk);//旧画笔
//::FillRect(hDC, &rcItem, hbrBkOld);//用旧画笔填充项矩形
//::DeleteObject(hbrBkOld);//删除旧画笔
//不选中项的显示代码,如果有隐藏非文本的代码放于此

//添加switch语句,检测是哪种报警信息


 category=GetItemData(lpDrawItemStruct->itemID);  //获取类别,哪一种报警信息,不同信息,用不同颜色设置

switch(category)
{

     case VTSMSG_DELWARN_TAG:        //删除报警报文

 hbrBkOld=::CreateSolidBrush(RGB(220,20,60));

 ::FillRect(hDC, &rcItem, hbrBkOld);//用旧画笔填充项矩形
 ::DeleteObject(hbrBkOld);//删除旧画笔


 break;


 case  VTSMSG_DROPAREAWARN_TAG:     //锚区报警报文

 hbrBkOld=::CreateSolidBrush(RGB(219,112,147));

 ::FillRect(hDC, &rcItem, hbrBkOld);//用旧画笔填充项矩形
 ::DeleteObject(hbrBkOld);//删除旧画笔

 break;


                                case.....其他

    
}   //end case


}   //end else
 




//不管选中不选中都显示的代码,显示文本的代码放于此    
//回复先前的HDC




pDC->DrawText(data[lpDrawItemStruct->itemID],&rcItem,DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_WORD_ELLIPSIS );


::SetTextColor(hDC, crOldText);

::SetBkColor(hDC, crOldBk);


}


发现颜色不成功,只有一行 颜色改变。。其他不变。。。。 很奇怪,肯定是DrawText的逻辑上有问题

---华软 网友回答---
u p up
---华软网友回复---
外界传入数据进来,ListBox解析然后显示,

根据SetItemData 的值来 使自己颜色改变
---华软网友回复---
up up      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。