gpt4 book ai didi

c++ - 无法删除 ListView 中的最后一列?

转载 作者:太空狗 更新时间:2023-10-29 20:52:52 25 4
gpt4 key购买 nike

我在这里遇到了一些麻烦。看来我无法删除所有列或(重置) ListView 。相关代码如下:

HWND resultListView = GetDlgItem(hwnd, IDC_RESULTCONTROL);
SendMessage(resultListView, LVM_DELETEALLITEMS, 0, 0); //All items are deleted

//Get numebr of columns
HWND hWndHdr = (HWND)::SendMessage(resultListView, LVM_GETHEADER, 0, 0);
int count = (int)::SendMessage(hWndHdr, HDM_GETITEMCOUNT, 0, 0L);

for (int colIndex = 0; colIndex < count; colIndex++) {
ListView_DeleteColumn(resultListView, colIndex);
}

///... Irrelevant code

HWND listbox = GetDlgItem(hwnd, IDC_SELECTEDLISTBOX);
int numberOfItemsSelected = SendMessage(listbox, LB_GETLISTBOXINFO, 0, 0);
vector<string> selectedItemsStringsVector;
char buf[250];
LVCOLUMN buffer;

//Add Selected Columns
for (int i = 0; i < numberOfItemsSelected; i++) { //In this case always 2 "Date" and "Time" for testing.
SendMessage(listbox, LB_GETTEXT, i, (LPARAM)buf);
selectedItemsStringsVector.push_back(buf);
buffer.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
buffer.fmt = LVCFMT_LEFT;
buffer.cx = 100;
buffer.pszText = buf;
buffer.cchTextMax = lstrlen(buf);
buffer.iSubItem = i;
buffer.iImage = 0;
buffer.iOrder = 0;
ListView_InsertColumn(resultListView, i, &buffer); //Works fine. Maybe I add an extra column here??
}

在 Debug模式下,我的所有变量都具有预期值。

FirstButtonClick Debug模式下的列计数(变量计数 = 2)一切正常。

image

SecondButtonClick 列数 = 3。但它不会删除它们?

image

英语不是我的主要语言,我现在有点困惑......

最佳答案

header control 中列的索引始终从 0 开始连续编号。用户代码不控制列的索引。删除列时,更高索引的列索引将向下移动 1。这就是调用 ListView_DeleteColumn 最终失败的原因。

有两种选择可以解决这个问题:

  • 从最终索引开始删除列到 0。删除最后一列不会更改其他列的索引,因此它们在整个删除操作中保持稳定。
  • 始终删除第一列(在索引 0 处)。

第二个选项更易于实现和阅读。以下循环将删除所有列:

for (int colIndex = 0; colIndex < count; ++colIndex) {
ListView_DeleteColumn(resultListView, 0);
}

关于c++ - 无法删除 ListView 中的最后一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44531282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com