本帖最后由 woailiyan 于 2010-11-05 17:15:45 编辑

解决方案 »

  1.   

    可以改,百度一下customdrawlistview
      

  2.   

    我用这个可以修改每一行数据的背景颜色,但是好像改不了标题栏的吧?标题栏没有Item吧?不太清楚。。能说详细点吗?
      

  3.   

    能说详细点吗?怎么重写?我刚在网上看了一个OnCtlColor这个函数,是用这个吗?谢谢
      

  4.   

    我尝试做了一下,基本还算顺利。1.插入一个类CHeadWnd,继承于CWnd,所有自绘代码就在这里面完成
    1.用一个CHeadWnd对象子类化 ClistCtrl的header
    2.CHeadWnd的Update()成员函数获取 header 的的 标题 和 rect
    3.在CHeadWnd的OnPaint里自绘。存在的问题。
    1.当header的每个item改变宽度时,未能及时更新。代码下载:http://cid-3ba16e78a53d2d3d.office.live.com/self.aspx/VC%5EM%5EM/clistctrl%E8%87%AA%E7%BB%98%E6%A0%87%E9%A2%98.zip
    vc6下编译通过愿顺利,阿弥陀佛!
      

  5.   

    至于改变高度,我看很高难度。即使Header的高度被改变了,但它会遮住ListCtrl的第一行item啊
      

  6.   

    codeproject.com 去看看  找找  有一个的
      

  7.   

    void CxHeader::OnPaint()
    {
    CPaintDC dc(this);
    CRect trect;
    CDC mdc;
    CBitmap bitmap; GetWindowRect(&trect);
    bitmap.CreateCompatibleBitmap(&dc, trect.Width(), trect.Height());
    mdc.CreateCompatibleDC(&dc);
    mdc.SelectObject( &bitmap );

    CBrush tbrush;
    //颜色在这里设置
    m_Color= RGB(000,100,100);
    tbrush.CreateSolidBrush(m_Color); GetClientRect(&trect);
    mdc.FillSolidRect(&trect,m_Color);
    //mdc.FillRect(&trect,&tbrush);
    SetBkMode(mdc ,TRANSPARENT); int temp=-1;
    for (int i=0 ; i< GetItemCount() ; i++)
    {
    GetItemRect(i,&trect);
    mdc.DrawText(m_Caption[i] ,&trect,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
    temp+=trect.Width();
    mdc.MoveTo(temp,0);
    mdc.LineTo(temp,trect.Height());  //画分隔线
    } GetWindowRect(&trect);
    //mdc.Draw3dRect(&trect , 100 , 250);
    dc.BitBlt(0,0,trect.Width()-1,trect.Height()-1,&mdc,0,0,SRCCOPY); ASSERT(m_pTree);
    m_pTree->Invalidate(); //通知树型控件,开始重绘}
      

  8.   

    ASSERT(m_pTree);
    m_pTree->Invalidate(); //通知树型控件,开始重绘这是错的吧,OnPaint里面加这个,会反复刷新的吧,这太闪烁了,可是我删掉这行,高度也只有当我拖拽HAEDER的时候才刷新,有高人指点解决此问题吗?