设置CListCtrl的一个属性:LVS_SHOWSELALWAYS

解决方案 »

  1.   

    LVS_SHOWSELALWAYS 不行,
    你应该自己画选中的item
      

  2.   

    从标准CListCtrl下继承一个自己的类CMyListCtrl,增加一个int型的成员变量m_nSelected用于记下最近一个选项,再在CMyListCtrl的失去焦点消息中,把该选项进行处理。
      

  3.   

    最简单的方法,在CListCtrl函数的初始化处理中设置扩展模式(向自己发消息),用LVS_SHOWSELALWAYS 风格即可。
    SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_SHOWSELALWAYS);
      

  4.   

    上面方法有一点要注意,必须保证发消息是你的CListCtrl窗口已创建了。
      

  5.   

    响应CListCtrl的ON_NOTIFY_REFLECT消息;
    大致如下:afx_msg void OnCustomdraw(NMHDR*, LRESULT*);
    ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomdraw)void CInfoList::OnCustomdraw(NMHDR* pNMHDR, LRESULT* pResult)
    {
    NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
    *pResult = 0;switch(pLVCD->nmcd.dwDrawStage)
    {
    case CDDS_PREPAINT:
    *pResult = CDRF_NOTIFYITEMDRAW;          // ask for item otifications.
    break;case CDDS_ITEMPREPAINT:
    *pResult = CDRF_NOTIFYSUBITEMDRAW;
    break;case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
    int nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec);// nItem表示item的index
    if(...)// 这里加入判断是否被选中的代码
    {
    crText = RGB(cr1);
    crBkgnd = RGB(cr2); // cr1和cr2分别为高亮显示时的文本和背景色,自己查一下
    }
    *pResult = CDRF_DODEFAULT;
    break;
    default:
    *pResult = CDRF_DODEFAULT;
    }
    }
      

  6.   

    gamcom兄:我的List是Report型的,这个消息映射不知怎么加上去,是不是要派生一个ListCtrl类,若有例子代码可否发一个给我,不胜感激。[email protected]
      

  7.   

    我找到了一个更加简单的方法,不过效果可能比不上自己画的好就是SetHotItem这样失去焦点时候该项也能突出显示
      

  8.   

    gamcom您好,我的List是Report型的,这个消息映射不知怎么加上去,是不是要派生一个ListCtrl类,若有例子代码可否发一个给我,不胜感激。
    [email protected]