WTL CListViewCtrl getSelectedItem导致Assertion失败

时间:2015-12-09 15:12:20

标签: c++ atl wtl

这是我的代码,以获取在我的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中的所有项目都是在我尝试调用此代码段落时创建的。

有人能指出我的解决方案吗?

1 个答案:

答案 0 :(得分:3)

您的控件未使用样式标记LVS_SINGLESEL创建。因此调用GetSelectedItem会导致断言。如果是多项选择,请使用GetFirstSelectedItemGetNextSelectedItem代替GetSelectedItem。对于单一选择,您可以继续使用GetSelectedItem,但必须向控件添加LVS_SINGLESEL样式标记。