none
listctrl无法改变行颜色 RRS feed

  • 问题

  • 我建了个单文档mfc程序(VS2008+Win7),为改变listctrl的行颜色,参考网上文章,在MyView里声明了如下宏

    ON_NOTIFY( NM_CUSTOMDRAW, 59648, OnDrawColorForMyList)

    其中59648是我之前通过CListCtrl& listCtrl = GetListCtrl(); listCtr.GetDlgID()获得的

    然后编写

    void  CGUI_WinZipView::OnDrawColorForMyList(NMHDR *pNmHdr, LRESULT *pResult)
    {
     CListCtrl& listCtrl = GetListCtrl();
     NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNmHdr );
        *pResult = CDRF_DODEFAULT;
     if ( CDDS_PREPAINT & pLVCD->nmcd.dwDrawStage )
     {
      *pResult = CDRF_NOTIFYITEMDRAW;
     }
     else if ( CDDS_ITEMPREPAINT & pLVCD->nmcd.dwDrawStage )
     {
      *pResult = CDRF_NOTIFYSUBITEMDRAW;
     }
     else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) & pLVCD->nmcd.dwDrawStage )
     {
      COLORREF clrNewTextColor, clrNewBkColor;
      int    nItem = static_cast<int>( pLVCD->nmcd.dwItemSpec );
      clrNewBkColor = RGB( 240, 240, 240 );
      if(listCtrl.GetItemText(nItem,2)==L"未知")
      {
        clrNewTextColor = RGB( 255, 0, 0 );
        pLVCD->clrText = clrNewTextColor;
        pLVCD->clrTextBk = clrNewBkColor;
        *pResult = CDRF_DODEFAULT;

       }
     }
    }

    放一些输入输出函数发现OnDrawColorForMyList实际上根本没执行,请问这是为什么?谢谢了

    注:我的程序是基于一个界面库里的sample程序修改的


    bylh
    2010年11月21日 8:03

答案

全部回复

  • listctrl设置Own Draw属性了么
    2010年11月22日 1:35
  • 我的建议:扔掉这些垃圾控件,直接转用Qt。原来我在这绘制上浪费了无数时间,自己用钩子从底层实现过这样的功能,但是现在看来一点用也没有,Qt只要两行代码就可以了。你要是在工作中需要使用,放弃微软的自带控件是最明智的选择,呵呵。要是自己学习,不要再在这上面浪费时间了。


    0xBAADF00D
    2010年11月22日 19:16
    版主
  • 注:我的程序是基于一个界面库里的sample程序修改的

    您好,

    或许你是在修改Sample的时候漏了什么。

    按照Sample里的思路自己新建一个简单的程序试试看有没有用。


    Daoping Liu - MSFT
    2010年11月23日 3:18
    版主
  • http://blog.csdn.net/VisualEleven/archive/2010/10/18/5948057.aspx
    可以参考一下这个
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE platform embedded development.
    2011年1月10日 5:00
    版主
  • 我的建议:扔掉这些垃圾控件,直接转用html。原来我在这绘制上浪费了无数时间,自己用钩子从底层实现过这样的功能,但是现在看来一点用也没有,html只要两行代码就可以了。你要是在工作中需要使用,放弃微软的自带控件是最明智的选择,呵呵。要是自己学习,不要再在这上面浪费时间了。
    2011年1月10日 7:55
  • 传说中QT很慢,像C#做的界面一样慢哦。。。
    2011年2月28日 8:32
  • Qt是C++写的,底层直接调用MMX绘制的窗口,速度应该比没有DX加速的GDI还快,毕竟GDI有的还要多调用一次Kernel的接口
    0xBAADF00D
    2011年3月27日 3:39
    版主
  • 我的建议:扔掉这些垃圾控件,直接转用html。原来我在这绘制上浪费了无数时间,自己用钩子从底层实现过这样的功能,但是现在看来一点用也没有,html只要两行代码就可以了。你要是在工作中需要使用,放弃微软的自带控件是最明智的选择,呵呵。要是自己学习,不要再在这上面浪费时间了。
    ……这个
    0xBAADF00D
    2011年3月27日 3:40
    版主
  • 你可以用CFormView+CListCtrl,CListCtrl你可以参考这个:http://blog.csdn.net/VisualEleven/archive/2010/10/18/5948057.aspx

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年3月28日 0:26
    版主