我做了一个拆分窗口,左边就一个CListView,右边的窗口显示左边被选中条目的详细内容。我的问题是如何在右边的窗口为当前活动窗口时,左边CListView原已被选中的条目就会失去原来的选中状态。如何才能让原来被选中的条目始终依然处于选中状态?谢谢指教MFCVC++

解决方案 »

  1.   

    有两种方法,一种自绘 CListView , 重写DrawItem ,
    另一种   重载 OnCustomdrawList
    网上挺多,搜一下
      

  2.   


    我这样写哪里出现问题了?和原来一样,到另一个子窗口是,被选中的条目就失去选中
    状态了void CMulFramesView::OnCustomDrawList ( NMHDR* pNMHDR, LRESULT* pResult )
    {
    NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
    //*pResult = 0;
    if ( CDDS_ITEMPOSTPAINT == pLVCD->nmcd.dwDrawStage )
    {
    int nItem=static_cast<int>(pLVCD->nmcd.dwItemSpec);
    if(GetListCtrl().GetItemState(nItem,LVIS_SELECTED))
    {
    pLVCD->clrTextBk=RGB(0,0,255);
    }
    *pResult = CDRF_NOTIFYITEMDRAW;
    }
    }
      

  3.   

    if(GetListCtrl().GetItemState(nItem,LVIS_SELECTED))这里表示选中的条目作变颜色处理。当你的焦点移到别处,可能系统认为你什么都没选,所以就没颜色了。
    可以试试看下面思路:  
        1、将选中的条目记下来,比如写到loc里面。
        2、选择位置改变时,用白色将原来的loc位置画一边(取消选中),再将loc变为新位置(非负整数),
           再把新位置用蓝色画一边。第一次选中条目时不做取消选中操作。    这样即使焦点移到别处, loc的值没有变,所以显示就会保持