【问题标题】:WTL ListView programatically set items stateWTL ListView 以编程方式设置项目状态
【发布时间】:2013-07-10 03:10:31
【问题描述】:

虽然有一个带有复选框的 Listview,但您如何以编程方式设置所有要检查的项目?

【问题讨论】:

    标签: winapi atl wtl


    【解决方案1】:

    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吗?
    • @Bart:索引在wParam 消息参数中给出。见msdn.microsoft.com/en-us/library/windows/desktop/…
    • @JonathanPotter 是的,但也有 struct 成员。 wParamiItem 是否应该具有相同的值以及如果它们不应该会发生什么,这是没有记录的。 #define ListView_SetItemState(hwnd,i,pitem) (BOOL)SNDMSGA((hwnd),LVM_SETITEMSTATE,(WPARAM)(UINT)(i),(LPARAM)(LPLVITEMA)(pitem)) 同样,索引i 已设置,但我们没有关于iItem 的信息。我想知道,因为当值不一致时,我在多选时遇到了一些问题,但我不确定这是否是实际原因。
    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多