【发布时间】:2013-07-10 03:10:31
【问题描述】:
虽然有一个带有复选框的 Listview,但您如何以编程方式设置所有要检查的项目?
【问题讨论】:
虽然有一个带有复选框的 Listview,但您如何以编程方式设置所有要检查的项目?
【问题讨论】:
Listview 复选框状态是通过项目状态的状态图像位设置的。您可以使用 LVM_SETITEMSTATE 消息更改项目状态,并且可以通过传递 -1 作为索引将更改应用于所有项目。
// The state-image index values:
// 1 for the "unchecked" (cleared) state-image
// 2 for the "checked" state-image
int iState = 2;
LVITEM lvi;
lvi.stateMask = LVIS_STATEIMAGEMASK;
lvi.state = INDEXTOSTATEIMAGEMASK(iState);
SendMessage(hwndListView, LVM_SETITEMSTATE, -1, (LPARAM)&lvi);
【讨论】:
CListViewCtrl::SetItemState
lvi.iItem 呢?不应该也设置为-1吗?
wParam 消息参数中给出。见msdn.microsoft.com/en-us/library/windows/desktop/…。
wParam 和 iItem 是否应该具有相同的值以及如果它们不应该会发生什么,这是没有记录的。 #define ListView_SetItemState(hwnd,i,pitem) (BOOL)SNDMSGA((hwnd),LVM_SETITEMSTATE,(WPARAM)(UINT)(i),(LPARAM)(LPLVITEMA)(pitem)) 同样,索引i 已设置,但我们没有关于iItem 的信息。我想知道,因为当值不一致时,我在多选时遇到了一些问题,但我不确定这是否是实际原因。