RT,,
高亮度是可以实现的,但是不知道为什么,
一旦列表控件失去焦点之后,所做的选择(即某行被选中)
就失效了(即推动焦点或者没了高亮度显示了),
不知道有没有一种更好的办法,能让它在失去焦点
之后保持选中的行高亮度显示,,,,
-------------------------

解决方案 »

  1.   

     有个always show selection属性  vc6打上钩就可以 vs2005设成turue 
      

  2.   

    有个列表样式,好象是LVS_EX_SHOWSELECTALLWAYS,自己查一下MSDN。
      

  3.   

    当前还是不行,,选中是选中的了,,但是高亮度显示的不是蓝色,,而像银色(同win98界面风格的颜色)
      

  4.   

    对,如果不做处理的话,当失去焦点是其显示是灰色的。当选择的时候你要用CListCtrl::SetItemState函数,传递一个LVIS_OVERLAYMASK参数,同时你要用一张bitmap图片作为选中状态覆盖在item上面的图标参考:m_list.SetItemState(m_nCheckedItem,   //选中项的索引值。
    INDEXTOSTATEIMAGEMASK(2) | INDEXTOOVERLAYMASK(1),
    LVIS_STATEIMAGEMASK | LVIS_OVERLAYMASK);更加详细的,请参见网上关于LVIS_OVERLAYMASK 参数的使用
      

  5.   

    to iyranly:
    同时你要用一张bitmap图片作为选中状态覆盖在item上面的图标 
    ----------------------
    这个就一头雾水了,,不知道具体该从何入手了,,
      

  6.   


    //楼主,你的需求:当CListCtrl失去焦点的时候,它被选中的item也可高亮显示,是这样吧?//是这样的话,可以通过响应消息NM_CUSTOMDRAW实现1 ON_NOTIFY ( NM_CUSTOMDRAW, IDC_LIST, OnCustomdrawMyList )  //消息响应2 m_ctrlList.SetItemState(item,LVIS_SELECTED,LVIS_SELECTED);  //item为被选中的项
      m_strKeySelect = m_ctrlList.GetItemText(item,isubkey); //成员变量m_strKeySelect记录下选中项的key
      m_ctrlList.Invalidate();3 void CDlgYour::OnCustomdrawMyList ( NMHDR* pNMHDR, LRESULT* pResult )
      {
    NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
            COLORREF crText,crBkgnd;  //文字和背景色
    if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
            {
                *pResult = CDRF_NOTIFYITEMDRAW;
            }
            else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
            {
                // This is the prepaint stage for an item. 
        *pResult = CDRF_NOTIFYSUBITEMDRAW;
            }
    else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )
            {
                CString strselect = m_ctrlList.GetItemText((int)pLVCD->nmcd.dwItemSpec,isubkey);
        if(strselect == m_strkeyselect)  //当重画的项为选中项时,重设文字和背景色
        {
    crText = RGB(0,0,0);
    crBkgnd = RGB(49,106,197);  //高亮背景色
    pLVCD->clrText = crText;
    pLVCD->clrTextBk = crBkgnd;
        }
        *pResult = CDRF_DODEFAULT;
    }
      }//vc2003测试通过,大概是这个意思,你可以参考下
      

  7.   

    你差不多是将背景变为蓝色,,,
    当前还是不行,,选中是选中的了,,但是高亮度显示的不是蓝色,,而像银灰色(同win98界面风格的颜色)
      

  8.   

    恩?有什么问题吗?//我贴的代码只是个参考
    NM_CUSTOMDRAW是将CListCtrl每项都重画的下面这句判断是否是你选中的项,是的话再重画,不是的话当然不会画啊
     if(strselect   ==   m_strkeyselect)     //当重画的项为选中项时,重设文字和背景色要不留个邮箱,我发个例程给你
      

  9.   

    to 楼主:不好意思啊,我15楼的代码是用程序的方式设置CListCtrl选中某一Item,使其高亮显示(即使没有焦点)
    不是你要的效果,你可以参考下面的例子,我也正在测试http://topic.csdn.net/t/20011214/17/421843.html
      

  10.   

    [email protected]
    非常感谢你的帮助,,
      

  11.   

    在OnKillfocus里获得选择的内容和矩形区域,然后直接用DC画吧
      

  12.   


    m_cListCtrl.SetFocus();
    m_cListCtrl.SetItemState(m_nCurIndex, LVIS_SELECTED, LVIS_SELECTED);
    UpdateData(FALSE);
      

  13.   

    楼主,抱歉啊,出去了一天已发,请查收NM_CUSTOMDRAW和发射NM_CUSTOMDRAW都没实现只好重载DrawItem了,看看是不是你要的效果
      

  14.   

    to datoucaicai:
        你的DrawItem是自己手机添加的吗?
         但看上去好像是系统添加的,,,因为
         有// TODO:  Add your code to draw the specified item一句
         可如果是系统添加的,可我也没找到映射是什么呀,,
      

  15.   

    DrawItem是手动添加的是我在网上找的部分代码,就带着这个注释应该说是写这部分代码的大侠添加的
      

  16.   

    对了注意添加CListCtrl的Owner Draw Fixed属性