WTL CListViewCtrl getSelectedItem 导致我断言失败
WTL CListViewCtrl getSelectedItem is causing an Assertion fail for me
这是我的代码,用于获取在我的 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
会导致断言。在多选的情况下使用 GetFirstSelectedItem
和 GetNextSelectedItem
而不是 GetSelectedItem
。对于单选,您可以继续使用 GetSelectedItem
,但您必须向控件添加 LVS_SINGLESEL
样式标志。
这是我的代码,用于获取在我的 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
会导致断言。在多选的情况下使用 GetFirstSelectedItem
和 GetNextSelectedItem
而不是 GetSelectedItem
。对于单选,您可以继续使用 GetSelectedItem
,但您必须向控件添加 LVS_SINGLESEL
样式标志。