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

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

谁能给我一个解决方案吗?

最佳答案

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

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

相关文章:

c++ - 提升正则表达式 : Specific Question

c++ - 从 Visual Studio 2005 升级到 Visual Studio 2008 的陷阱

c++ - 实例化 COM 和 ATL 类型

c++ - 如何使用 WTL 拒绝调整窗口大小?

c++ - 当函数仅支持字符串类型时以二进制十六进制发送数据

c++ - DCOM:如何在客户端崩溃时关闭服务器中的连接?

c++ - Microsoft 使用什么作为 Unicode 字符串的数据类型?

c++ - Visual Studio 在调试时将不相关的 DLL 加载到我的项目中

c++ - WTL 和 CContainedWindow 导致访问冲突

c++ - OpenGL - GL_LINE_STRIP 的行为类似于 GL_LINE_LOOP