teleinfor 2019年11月15日
CListCtrl控件,如何修改当前选中行的颜色?
需求:修改选中行(FOCUSED & SELECTED)行背景和字体颜色。
默认当前选中行(获取焦点和选中状态)为蓝色高亮显示,我想修改当前鼠标点击行颜色为红色背景、白色前景。
如下自绘代码仅仅能实现,失去焦点后的行颜色修改。焦点状态依然是默认的蓝色高亮!如何修改这个默认的颜色呢???已经设置了FOCUSED和SELECTED颜色一致,可是没有任何效果展示。


NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
*pResult = 0;
int nItem = -111;
int nSubItem = -111;
COLORREF clrNewTextColor, clrNewBkColor;
//Switch between different draw stages
switch (pLVCD->nmcd.dwDrawStage) {

case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
break;

case CDDS_ITEMPREPAINT:

*pResult = CDRF_NOTIFYSUBITEMDRAW;
break;

case CDDS_ITEMPREPAINT | CDDS_SUBITEM:

nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec); //获取当前重绘行索引
nSubItem = static_cast<int>(pLVCD->iSubItem); //获取当前重绘列索引

if (m_list.GetItemState(nItem, LVIS_FOCUSED|LVIS_SELECTED)) //如果重绘行就是选中的单元格所在的行
{
clrNewTextColor = RGB(255, 255, 255); //设置文本颜色
clrNewBkColor = RGB(255, 0, 0); //设置背景颜色
pLVCD->clrText = clrNewTextColor;
pLVCD->clrTextBk = clrNewBkColor;
}
else
{
clrNewTextColor = RGB(0, 0, 0);
clrNewBkColor = RGB(143, 193, 60);
pLVCD->clrText = clrNewTextColor;
pLVCD->clrTextBk = clrNewBkColor;
}
//else if (nSubItem == SelectCol) //如果重绘列是选中的单元格所在的列
//{
// clrNewTextColor = RGB(0, 0, 0);
// clrNewBkColor = RGB(230, 230, 250);
// pLVCD->clrText = clrNewTextColor;
// pLVCD->clrTextBk = clrNewBkColor;
//}
//else if (nSubItem > SelectCol) //只显示一列,如果没有这个判断就会显示后面所有列
//{
// clrNewTextColor = RGB(0, 0, 0);
// clrNewBkColor = RGB(255, 255, 255);
// pLVCD->clrText = clrNewTextColor;
// pLVCD->clrTextBk = clrNewBkColor;
//}
*pResult = CDRF_DODEFAULT;
break;

default:
break;

}
...全文
32 点赞 收藏 8
写回复
8 条回复

还没有回复,快来抢沙发~

发动态
发帖子
界面
创建于2007-09-28

7970

社区成员

11.5w+

社区内容

VC/MFC 界面
社区公告
暂无公告