CLISTVIEW如何根据不同的行显示整列不同颜色

zhangshengyu 2005-09-14 04:28:15
自绘制 CLITVIEW 修改lplvcd->clrTextBk 可以不同行显示不同颜色,但是改变颜色的只是有文字的地方 最后面和前面图标的地方颜色没法改
怎么去改变整个行的颜色?
...全文
199 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangshengyu 2005-09-19
  • 打赏
  • 举报
回复
跟没说一样 地球人都知道
关键是如何去做
会思考的草 2005-09-16
  • 打赏
  • 举报
回复
三种方法:第一,自己处理WM_PAINT消息,比较低级,所有绘画动作必须自己做,但是能实现的最完美,我喜欢这种方法;第二,使用CustomDraw,同楼上的,但是有时候莫名其妙的失效;第三使用Owener Draw
zhangshengyu 2005-09-16
  • 打赏
  • 举报
回复
???
zhangshengyu 2005-09-15
  • 打赏
  • 举报
回复
一样的啊
右面没有列空白的地方始终是白的
还有就是没有条目的地方也全是白的。
nkwesley 2005-09-15
  • 打赏
  • 举报
回复
void CTestListCtrl::SetRowColor(UINT nOddRow,COLORREF clrText,COLORREF clrTextBk)
{
if(nOddRow % 2 == 1)
{
m_clrTextOdd = clrText;
m_clrTextBkOdd = clrTextBk;
}
else
{
m_clrTextEven = clrText;
m_clrTextBkEven = clrTextBk;
}

if(::IsWindow(GetSafeHwnd()))
{
InvalidateRect(NULL);
}
}

void CTestListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;

switch(lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT :
{
*pResult = CDRF_NOTIFYITEMDRAW;
break;
}

case CDDS_ITEMPREPAINT:
{
if(lplvcd->nmcd.dwItemSpec % 2 == 1)
{
lplvcd->clrText = m_clrTextOdd;

lplvcd->clrTextBk = m_clrTextBkOdd;
}
else
{
lplvcd->clrText = m_clrTextEven;

lplvcd->clrTextBk = m_clrTextBkEven;
}

*pResult= CDRF_NEWFONT|CDRF_NOTIFYSUBITEMDRAW;

break;
}

case CDDS_SUBITEM | CDDS_ITEMPREPAINT:
{
if(lplvcd->nmcd.dwItemSpec % 2 == 1)
{
lplvcd->clrText = m_clrTextOdd;

lplvcd->clrTextBk = m_clrTextBkOdd;
}
else
{
lplvcd->clrText = m_clrTextEven;

lplvcd->clrTextBk = m_clrTextBkEven;
}

*pResult= CDRF_NEWFONT;

break;
}
default:
{
*pResult = CDRF_DODEFAULT;

break;
}
}
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧