如题。
我要在初始化的时候根据我的判断动态的改变某个添加进去的行的颜色。我知道在OnNMCustomdrawList事件中
if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )中可以改变行的颜色。不过这个只能是具体的固定行的颜色。我有试过加一个变量。然后在if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )根据这个变量的值来改变行的颜色。不过无效。codeproject里的例子太复杂了。然后还有一个问题是checkbox能否在其他的行添加。改了风格后是在第一行添加的。
我要在初始化的时候根据我的判断动态的改变某个添加进去的行的颜色。我知道在OnNMCustomdrawList事件中
if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )中可以改变行的颜色。不过这个只能是具体的固定行的颜色。我有试过加一个变量。然后在if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )根据这个变量的值来改变行的颜色。不过无效。codeproject里的例子太复杂了。然后还有一个问题是checkbox能否在其他的行添加。改了风格后是在第一行添加的。
可以下这个例子看看:
http://www.uipower.com/bbs/thread-97843-1-1.html
如果控件开发的话,有XListControl这么好的例子,都说复杂,楼主干脆也别干了,没啥可研究的,搞研究的最怕的不是复杂,而是没方向,没东西可以研究。
2、用LVS_EX_SUBITEMIMAGES扩展风格可以给每个子项设置图标,用两个图标分别表示check和uncheck状态,响应NM_CLICK通知用HitTest判断点击的位置更换图标。
void OnNMCustomdrawList2(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
COLORREF crText;
if (bValidCert)
{
crText = RGB(255,0,0);
}
else
{
crText = RGB(0,255,0); }
}
}
这是我添加项的时候的代码。不知道怎么来添加颜色。
LVITEM item;
item.iItem=i;
item.iSubItem=0;
item.mask=LVIF_TEXT;
item.pszText=strUser.GetBuffer(0);
m_CertManList.SetItem(&item); item.iItem=i;
item.iSubItem=1;
item.mask=LVIF_TEXT;
item.pszText=strSn.GetBuffer(0);
m_CertManList.SetItem(&item); item.iItem=i;
item.iSubItem=2;
item.mask=LVIF_TEXT;
item.pszText=strTime.GetBuffer(0);
m_CertManList.SetItem(&item); item.iItem=i;
item.iSubItem=3;
item.mask=LVIF_TEXT;
item.pszText=strName.GetBuffer(0);
m_CertManList.SetItem(&item);
另外第二个的话我知道可以改变风格显示checkbox但是只是添加在行首怎么移动到行尾是个问题。
谢谢
2、你没有注意看我前面的回复。LVS_EX_SUBITEMIMAGES扩展风格是让每个SubItem都具有一个图标,不是每个Item一个CheckBox。
假如每行数据用同一种颜色显示,你可以直接把颜色值用SetItemData保存起来,在OnNMCustomdrawList中用GetItemData取出处理。在最初添加Item的时候就需要SetItemData,之后如果要修改Item的颜色时可以再次SetItemData,然后再刷新显示。
http://www.codeproject.com/KB/miscctrl/gridctrl.aspx
你在CGridCtrl 里面用 checkbox功能,都是现成的了。
再扩展也很容易
codeproject上的例子确是都实现了你的要求,你嫌麻烦可以直接重写他的相应类即可