clistctrl 如何设定某一行的颜色

如题所述

第1个回答  推荐于2016-05-18
在listctrl的NM_Customdraw消息响应函数里弄:例子如下
LRESULT CXXXDialog::OnNMCustomdrawListLayer(int idCtrl, LPNMHDR pNMHDR, BOOL& bHandled)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
pLVCD->clrFace=RGB(255,0,0);
if ( CDDS_PREPAINT ==pLVCD->nmcd.dwDrawStage )
{
return CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{//这里可以编写代码设置某一行的颜色
int nItem=static_cast<int>(pLVCD->nmcd.dwItemSpec );
if (nItem==1)
{
long r=100;
long g=0;
long b=0;
pLVCD->clrTextBk=RGB(r,g,b);
}

return CDRF_NOTIFYSUBITEMDRAW;
}
else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )
{//这里可以设定具体某一行某一格的背景颜色
int nItem=static_cast<int>(pLVCD->nmcd.dwItemSpec );
int nSubItem=pLVCD->iSubItem;
if (nSubItem==4)
{
long r=100;
long g=0;
long b=0;
pLVCD->clrTextBk=RGB(r,g,b);

}
}

return 0;
}追问

listctrl的NM_Customdraw消息响应函数怎么没有找到啊,message里没有呀

本回答被提问者采纳

clistctrl 如何设定某一行的颜色
{\/\/这里可以编写代码设置某一行的颜色 int nItem=static_cast<int>(pLVCD->nmcd.dwItemSpec );if (nItem==1){ long r=100;long g=0;long b=0;pLVCD->clrTextBk=RGB(r,g,b);} return CDRF_NOTIFYSUBITEMDRAW;} else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd....

如何使CListCtrl中的某一个单元格只能接受数字的输入
不能只设置某个单元格的输入,但是可以通过消息来拦截 实现 (消息处理里面判断是否所要求的单元格,这个判断很简单,根据NMHDR——NMLVDISPINFO参数,具体看MSDN)LVN_BEGINLABELEDIT 备份当前数值 LVN_ENDLABELEDIT 读取输入的字符串是否数字,合法就更新,否则使用上面备份的数值。——这样就可以达到你的要求...

相似回答