gpt4 book ai didi

c++ - WTL CListViewCtrl getSelectedItem 导致我断言失败

转载 作者:搜寻专家 更新时间:2023-10-31 01:37:23 25 4
gpt4 key购买 nike

这是我的代码,用于获取在我的 CListViewCtrl 中选择的项目的名称:

LVITEM item = { LVIF_PARAM };
CString itemText;

clistViewCtrl.GetSelectedItem(&item);

clistViewCtrl.GetItemText(item.iItem, item.iSubItem, itemText);

请注意,此代码有效。我最近做了另一个项目,我完全以这种方式获取了名称,但是,我没有遇到任何断言失败的问题。

当我对当前项目执行此操作时,我总是会得到一个调试断言:

"File: ... atlctrls.h"
Line: 3242

Expression: (GetStyle() & 0x0004) != 0

尽管表达式已经说明了很多,这里是导致失败的行:

ATLASSERT((GetStyle() & LVS_SINGLESEL) != 0);

我几乎不知道问题出在哪里。正如我所说,完全相同的代码适用于我的另一个项目,我只是检查了这两个项目,试图找出可能导致此行为的任何差异,但没有引起我的注意。

老实说,考虑到两个比较元素似乎是预定义的,我什至不知道这是否与我的代码有关。

我的第一个猜测是这部分在项目创建之前被调用,但 ListView 中的所有项目都是在我尝试调用此代码段时创建的。

谁能指出我的解决方案?

最佳答案

您的控件不是使用样式标志 LVS_SINGLESEL 创建的。因此调用 GetSelectedItem 会导致断言。在多选情况下使用 GetFirstSelectedItemGetNextSelectedItem 而不是 GetSelectedItem。对于单选,您可以继续使用 GetSelectedItem,但您必须向控件添加 LVS_SINGLESEL 样式标志。

关于c++ - WTL CListViewCtrl getSelectedItem 导致我断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34182269/

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