从CListCtrl检索当前列表项文本时出现问题
issue with retrieving current list item text from CListCtrl
我正在尝试从CListCtrl检索所选列表项。第一个项目文本检索正确。稍后,当我选择"下一个"时,只检索上一个列表项文本。下面是当我从CListCtrl中选择一个项目时触发的事件方法。
示例场景
列表(m_RListCtrl)->项目1、项目2、项目3
第一次单击/选择项目2。m_EditBox中显示的项目2文本。接下来,我单击项目3。项目2仍然显示然后我单击项目1。项目3显示在编辑框中然后我单击项目2。将显示项目1。。。。。。。…
事件代码:
void CRTConfigDlg::OnLvnItemchangedRepoConfigList(NMHDR *pNMHDR, LRESULT *pResult)
{
CString itemText = L"";
itemText = m_RListCtrl.GetItemText(m_RListCtrl.GetSelectionMark(), 0);
m_EditBox.SetWindowText(itemText);
//UpdateWindow();
}
我甚至在MFC CListCtrl中尝试了以下从获取项目文本索引的解决方案。但问题仍然是一样的。
你能帮我知道我哪里错了吗?
您也可以使用Itemchanged Notification,但必须记住,此事件是在选择和取消选择项目时触发的。
所以你需要检查项目的状态。
void CAnyDialogClass::OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// check if the items state changed to selected.
if ((pNMLV->uChanged & LVIF_STATE)!=0 &&
(pNMLV->uOldState & LVIS_SELECTED)==0 &&
(pNMLV->uNewState & LVIS_SELECTED)!=0)
{
// This item is selected now
...
更精确的方法是使用LVIS_FOCUSED。用户可以通过仅按住Ctrl键并使用光标移动键来改变项目的焦点。
您需要遍历所选项目,如下所示:
int nColumns = m_RListCtrl.GetHeaderCtrl()->GetItemCount();
POSITION pos = m_RListCtrl.GetFirstSelectedItemPosition();
while (pos)
{
int nItem = m_RListCtrl.GetNextSelectedItem(pos);
for(int i=0; i<nColumns; i++)
{
CString sItem = m_RListCtrl.GetItemText(nItem, i);
// TO DO: do stuff with item text here
}
}
相关文章:
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 绘制文本问题
- 用户定义的文本运算符(在原始模式下)存在问题
- 在 cout 中将线条表单文件与自定义文本组合时出现问题
- 在文本中查找半个单词"ABBA"的问题
- 从文件中读取文本时出现编码问题
- QTreeWidgetItem 突出显示文本问题
- 在 Qt C++ 中在自定义项委托上绘制文本时的性能问题
- opengl 飞行模拟器应用程序中的文本呈现问题
- 使用 c++ ifstream 读取文本文件问题
- 在C++中使用 Visual Studio 读取文本文件时遇到问题
- 我在编写从文本文件中读取数据并按升序打印的代码时遇到问题
- 使用 substr 提取文本文件时出现问题
- 问题 - 递归函数以返回文本文件排列
- 我在让我的代码输出整个链表时遇到问题.它只是输出我修改过的一些文本文件,而不是整个东西
- 解析基于逗号的文本文件时出现问题 (C++)
- UTF-16LE 编码问题与 Qt 文本编辑器用 C++ 编写
- 不确定我在阅读文本文件时的问题是什么
- 如何解决此问题,我需要从文本文件中导出一行
- SDL2 呈现文本问题