WTL CListViewCtrl getSelectedItem导致我的断言失败

WTL CListViewCtrl getSelectedItem is causing an Assertion fail for me

本文关键字:我的 断言 失败 CListViewCtrl getSelectedItem WTL      更新时间:2023-10-16

这是我的代码,用于获取在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);

我几乎不知道问题出在哪里。正如我所说,完全相同的代码在我的另一个项目中起作用,我只是仔细研究了两者,试图找出可能导致这种行为的任何差异,但没有什么引起我的注意。

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

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

有人能给我指一个解决方案吗?

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