让ListView只能选一行或一块,不能选分离的行。也就是禁止掉Ctrl+选择方式。
怎么实现?

解决方案 »

  1.   

    在属性里的Styles栏里,把single selection标上
      

  2.   

    喔,看错题了.
    在PreTranslateMessage里处理WM_KEYDOWN消息,判断Ctrl按下时,直接返回.
      

  3.   

    派生一个ListView,在PreTranslateMessage中屏蔽掉Ctrl键的消息
      

  4.   

    code project里有很多这方面的源码阿,建议lz去研究研究
      

  5.   

    派生一个ListView,在PreTranslateMessage中屏蔽掉Ctrl键的消息
    ===========================================================
    对于按住Ctrl+MouseLeft是无效的
      

  6.   

    你试试看void CYourList::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call defaultif (GetKeyState(VK_CONTROL)&0x80)
    return ;// .....CListCtrl::OnLButtonDown(nFlags, point);
    }
      

  7.   

    对于按住Ctrl+MouseLeft是无效的
    ===========================================================
    Who says?BOOL CYourList::PreTranslateMessage(MSG* pMsg) 
    {
        // TODO: Add your specialized code here and/or call the base class
        BOOL b = GetAsyncKeyState(VK_CONTROL) >> ((sizeof(short) * 8)-1);
        if(b)
        {    
           b = GetAsyncKeyState(MK_LBUTTON) >> ((sizeof(short) * 8)-1);
           if(b)
               return TRUE;
        }
        return CListCtrl::PreTranslateMessage(pMsg);
    }
      

  8.   

    处理LVN_ITEMCHANGING,
    1、若(uNewState&LVIS_SELECTED)==0 return 0;
    2、ListView_GetNextItem找有无选中的item,若无,return 0L;
    3、判断该iItem-1/iItem+1的选中状态,若均未选中,则return TRUE; //阻止该item被选择。
    4、return 0L; //允许选中
      

  9.   

    LS这样也不行。
    如选择了1,2,3,4
    用Ctrl+MouseLeft反选3.那问题就更大。
      

  10.   

    BOOL CYourList::PreTranslateMessage(MSG* pMsg) 
    {
        // TODO: Add your specialized code here and/or call the base class
        BOOL b = GetAsyncKeyState(VK_CONTROL) >> ((sizeof(short) * 8)-1);
        if(b)
        {    
           b = GetAsyncKeyState(MK_LBUTTON) >> ((sizeof(short) * 8)-1);
           if(b)
               return TRUE;
        }
        return CListCtrl::PreTranslateMessage(pMsg);
    }
    =============================================
    好象可以,这是屏蔽了Ctrl消息或屏蔽了MouseLeft消息?