RT!只要能知道是否有多行被选中就行了。

解决方案 »

  1.   

    选定一行:
    设置CListCtrl的Show selection always选项
    SetItemState (iIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED) 选中一个或多个项目时,会发送LVN_ITEMCHANGED消息,可以使用
    GetSelectedCount()方法得到被选定的项的数目。点击列头的消息响应:
    ON_NOTIFY(HDN_ITEMCLICKW, 0, ResponseFunc)
    消息,需要自己添加 
    或者:
    ON_NOTIFY(LVN_COLUMNCLICK, ID_yourCtrl, ResponseFunc)//向导添加
    前者后响应,后者先响应响应函数:
    ResponseFunc(NMHDR *pNMHDR, LRESULT *pResult) 双击CListCtrl中的ITEM的消息是及消息函数:
    ON_NOTIFY(NM_DBLCLK, ID_yourCtrl, ResponseFunc) 单击ITEM的消息响应:
    ON_NOTIFY(NM_CLICK, ID_yourCtrl, ResponseFunc)
    ResponseFunc(NMHDR *pNMHDR, LRESULT *pResult) 
    HDN_ITEMCLICK 就是Header control Notify message for mouse left click on the Header control!
    而HDN_ITEMCLICK是当List View中存在一个Header Contrl时,Header Ctrl通知父窗口List View的!CListCtrl中的Item被选中触发LBN_SELCHANGE(通过WM_COMMAND)消息!删除CListCtrl中选定的项:
    POSITION pos;
    int nIndex;for(; pos= GetFirstSelectedItemPosition();)
    {
    nIndex = GetNextSelectedItem(pos);
    DeleteItem(nIndex);
    }
      

  2.   

    我想实现的目的是:
    Button1初始化灰掉
    若只选中一行,则Button1启用
    若选中多行,则Button1灰掉按照你的第一种方法,在listctrl的NM_CLICK中判断GetSelectedCount()好像不起作用啊
      

  3.   

    上面说的是LVN_ITEMCHANGED消息,也不行?
      

  4.   

    POSITION pos;
    int nIndex;for(; pos= GetFirstSelectedItemPosition();)
    {
    nIndex = GetNextSelectedItem(pos);
    DeleteItem(nIndex);
    }
    这个方法真好 感谢
      

  5.   


    但是删除一行后你的迭代会变无效的,因为删除后面的行都往上移了,但是pos还是原来的值,肯定有问题的