热情软件屋

 

如何使用带Checkbox的ListView


编号:QA000479
建立日期: 1999年2月5日 最后修改日期:2003年10月17日
所属类别:

胡明湖:
    我用VC编程,对我的列表视图使用了带核选框扩展风格,
    ListView_SetExtendedListViewStyle(ListCtrl.GetSafeHwnd(),LVS_EX_CHECKBOXES)
    请问如何能获得列表视图中指定项的核选框设置情况,是否已选择?

回答:

    先用ListView_GetItemState( (ListCtrl.GetSafeHwnd(), i, LVIS_STATEIMAGEMASK)(其中LVIS_STATEIMAGEMASK = 0xF000)得到指定项的设置,如果设置为0x2000,就说明Checkbox被选中。
    你也可以参考http://www.vchelp.net/wyy/paper/add_checkbox.htm
    
    lisuny问:
    如果我想有一个全选按钮,当我点击该按钮时,列表视图中全部项的Checkbox被选中。我使用SendMessage(myhwnd,LVM_SETITEMSTATE,(WPARAM)(int)-1,(LPARAM)(LPLVITEM)&lState);没有效果。使用ListView_SetCheckState,可是在我的commctrl.h中找不到声明。请指点
    答:你可以写一个循环,对于每个项使用ListView_SetItemState 设置选中。设置选中可以使用ListView_SetItemState,其说明在VC++ 5.0/6.0的头文件中都有。
    
    涛 涛的意见:
    MSDN提示:
    LVS_EX_CHECKBOXES Version 4.70.
    判断是否选中
    ListView_GetCheckState 宏,此宏不用自己再次定义.
    定义宏:
    #ifndef ListView_SetCheckState
     #define ListView_SetCheckState(hwndLV, i, fCheck) \
     ListView_SetItemState(hwndLV, i, \
     INDEXTOSTATEIMAGEMASK((fCheck)+1), LVIS_STATEIMAGEMASK)
    #endif
    使用此宏设置状态,
    fCheck---true选中
    false 不选
    
    wuy的意见:
    int cnt=ListView_GetItemCount(m_ListCtrl.GetSafeHwnd());
     for (int i=0;i     {ListView_SetItemState (m_ListCtrl.GetSafeHwnd(), 1,0x2000, LVIS_STATEIMAGEMASK);}
    ///全部选中
    if (ListView_GetItemState(m_ListCtrl.GetSafeHwnd(), i, LVIS_STATEIMAGEMASK) & 0x2000) //判断是否选中

此问题由李海回答。

附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, Windows 9x控件, listview, treeview, monthview, progress bar

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio