这样基本能实现,唯一的问题是listview没有提供获取某个item的背景颜色API
[C] 纯文本查看 复制代码 static int listview_owner_draw(const WIDGET_ITEM_DRAW_INFO * pItem)
{
switch (pItem->Cmd)
{
case WIDGET_ITEM_DRAW_BACKGROUND:
{
GUI_RECT rect;
char txt_buf[50] = {0};
rect.x0 = pItem->x0;
rect.x1 = pItem->x1;
rect.y0 = pItem->y0;
rect.y1 = pItem->y1;
GUI_SetBkColor(GUI_BLACK);
GUI_ClearRectEx(&rect);
int row = LISTVIEW_GetSel(pItem->hWin);
int col = LISTVIEW_GetSelCol(pItem->hWin);
if( ( (pItem->ItemIndex) == row) && (pItem->Col == col) )
{
GUI_SetColor(GUI_BLUE);
GUI_DrawRoundedFrame(pItem->x0,pItem->y0,pItem->x1,pItem->y1,0,3);
}
else
{
GUI_SetColor(GUI_DARKGRAY);
GUI_DrawRoundedFrame(pItem->x0,pItem->y0,pItem->x1,pItem->y1,0,1);
}
LISTVIEW_GetItemText(pItem->hWin,pItem->Col,pItem->ItemIndex, txt_buf, 50);
GUI_SetFont(LISTVIEW_GetFont(pItem->hWin));
GUI_SetTextMode(GUI_TM_TRANS);
GUI_SetColor(GUI_WHITE);
int chb_align = LISTVIEW_GetTextAlign(pItem->hWin,pItem->Col);
GUI_DispStringInRect(txt_buf, &rect, chb_align);
}
break;
case WIDGET_ITEM_DRAW:
{
}
break;
// default:
// return LISTVIEW_OwnerDraw(pItem);
}
return 0;
} |