登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

vic.MINg的博客

 
 
 

日志

 
 

指定改变ListCtrl中某一行的颜色  

2009-02-19 14:58:24|  分类: Mfc |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

        绕了几圈才发现迷糊的是自己,可是自己傻呼呼的还在原地,脑袋里全是乱七八糟的浆糊。不懂为什么会乱成这个样子。
        直到醒来才发现只有电脑始终没有改变对你的忠诚!不知道值不值得叹息,现在的我就是一个代码机器,枯燥乏味,已经没有了一点乐趣。
        舍弃了游戏,丢掉了QQ,却还是静不下心。我想缓解几天,却给不出自己一点时间。
        今天大雪,我什么都不想做,想早早回家,静静的呆上半天!但这也只是个想法……
        此刻,我打算新的开始,淡然的过完这个下午,从明天新的开始……抛开一切不实际的想法,不再相信有童话的存在。还是先不谈感情,我对女孩子还是很感冒,大男人最怕的居然是酒和色——崩溃,这个方面的问题就让它瞬息自然吧!有时间的话找兄弟们吹吹牛皮,有意思的多!寻找最初对编程的热爱,可能有点困难,但我还是想找回对它的热爱,学一些有挑战的东西,每天都看会儿书,再不行我就写点木马搞搞乱啥的,就不信找不到感觉……不再当代码机器了,管那些老板们怎么看的,有能耐就炒我吧!反正我没对不起任何人~~
        男人事业先为重,但我以不想在漫无地精神疲惫下工作了,调整自己心态,放松自己心情。杂七杂八都抛开。

        先为了自己的奥迪A4奋斗,虽然养不起,虽然还不会开车……也要确定自己的目标,奋斗!!

 

        指定改变CListCtrl中某一行的颜色,比如说刚添加进去的一行,让它改变颜色,这样记录多了,容易看到自己刚刚加如的行,方便操作可查看,也可以让添加和修改的记录显示不一样的颜色,方便的多了,VC自带的没有这种功能。

1.首先从CListCtrl 继承一个类,命名为CXListCtrl

在头文件中加摸板

CMap<DWORD, DWORD&, COLORREF, COLORREF&> MapItemColor;

好在这里查找你的修改的颜色。

2.自己写个消息映射,可能添加不上,要自己写。

BEGIN_MESSAGE_MAP(CXListCtrl, CListCtrl)
    ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdraw)
//  ON_WM_SIZE()
END_MESSAGE_MAP()

OnNMCustomdraw 为实现函数。

3.写OnNMCustomdraw函数。

void CXListCtrlNew::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: Add your control notification handler code here
    *pResult = CDRF_DODEFAULT;
    NMLVCUSTOMDRAW * lplvdr=(NMLVCUSTOMDRAW*)pNMHDR;
    NMCUSTOMDRAW &nmcd = lplvdr->nmcd;
    switch(lplvdr->nmcd.dwDrawStage)//判断状态
    {
        case CDDS_PREPAINT:
        {
            *pResult = CDRF_NOTIFYITEMDRAW;
            break;
        }
        case CDDS_ITEMPREPAINT://如果为画ITEM之前就要进行颜色的改变
        {
            COLORREF ItemColor;
            if(MapItemColor.Lookup(nmcd.dwItemSpec, ItemColor))
            // 根据在 SetItemColor(DWORD iItem, COLORREF color) 设置的
            // ITEM号和COLORREF 在摸板中查找,然后进行颜色赋值。
            {
                //lplvdr->clrText = RGB(0,0,0);//ItemColor;
                lplvdr->clrTextBk = ItemColor;
                *pResult = CDRF_DODEFAULT;
            }
        }
        break;
    }
}

4.修改指定一行的颜色。

void CXListCtrl::SetItemColor(DWORD iItem, COLORREF color)
{
    //    m_iCurrentItem = iItem;
    //    m_CurrentColor = color;

    MapItemColor.SetAt(iItem, color);//设置某行的颜色。
    this->RedrawItems(iItem, iItem);//重新染色

    //this->SetCheck(iItem,1);
    this->SetFocus();    //设置焦点
    UpdateWindow();
}

5.修改全部行的颜色。

void CXListCtrl::SetAllItemColor(DWORD iItem,COLORREF TextBkColor)
{
    //INT_PTR ncount = this->GetItemCount();
    if(iItem > 0)
    {
        for(DWORD numItem = 0; numItem < iItem ;numItem ++)
        {
            //iItem = i;
            MapItemColor.SetAt(numItem, TextBkColor);
            this->RedrawItems(numItem, numItem);
        }
    }

    return;
}

  评论这张
 
阅读(4384)| 评论(1)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018