如何使用带Checkbox的ListView
编号:QA000479
建立日期: 1999年2月5日 最后修改日期:2003年10月17日
所属类别:
Q
胡明湖:
我用VC编程,对我的列表视图使用了带核选框扩展风格,
ListView_SetExtendedListViewStyle(ListCtrl.GetSafeHwnd(),LVS_EX_CHECKBOXES)
请问如何能获得列表视图中指定项的核选框设置情况,是否已选择?
A回答:
先用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。
| |
|
|
| |
|
|