ListBox自绘
需要将不同等级的报警信息以不同的颜色 显示,一行代表一条信息。。。
为此,我自绘了ListBox。
但是感觉不对, 逻辑上有问题。。。
大家帮忙改一改 ,谢谢啦
[code=C/C++][/code]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);
}
[解决办法]
逻辑上的错误具体指?我眼神不好,直接给出错误列表吧