后端开发过程遇到的问题总结(9)
1.单选情况下
方法一(只允许单选的情况下):
int nIndex = m_list.GetSelectionMark(); //获取选中行的行号
CString s = m_list.GetItemText(nIndex, 0); //获取第0列内容
方法二:
int nIndex = m_list.GetNextItem(-1, LVNI_SELECTED);
CString s = m_list.GetItemText(nIndex, 0);
CListCtrl::GetNextItem
搜索具有指定属性并且具有与给定项相关的指定关系的列表视图项。
int GetNextItem(
int nItem,
int nFlags) const;
参数:
nItem
要开始搜索的项的索引,或者为-1,则查找与指定标志匹配的第一项。 指定的项本身将从搜索中排除。
nFlags
请求的项与指定项的几何关系,以及所请求项的状态。 几何关系可以是以下值之一:
-
LVNI_ABOVE 搜索指定项之上的项。
-
LVNI_ALL 按索引搜索后续项(默认值)。
-
LVNI_BELOW 搜索指定项下面的项。
-
LVNI_TOLEFT 在指定项的左侧搜索项。
-
LVNI_TORIGHT 在指定项的右侧搜索项。
状态可以是零,也可以是以下一个或多个值:
-
LVNI_DROPHILITED 项已设置 LVIS_DROPHILITED 状态标志。
-
LVNI_FOCUSED 项已设置 LVIS_FOCUSED 状态标志。
-
LVNI_SELECTED 项已设置 LVIS_SELECTED 状态标志。
如果项未设置所有指定的状态标志,则搜索将继续下一项。
返回值:
如果成功,则为下一个项的索引; 否则为-1。
2.多选情况下
CString str;
POSITION pos = list.GetFirstSelectedItemPosition(); //pos选中的首行位置
if (pos == NULL) {
AfxMessageBox(L"no item were selected!");
}
else {
while (pos) { //如果选择多行
int nIdx = -1;
nIdx = list.GetNextSelectedItem(pos);
if (nIdx >= 0 && nIdx < liste.GetItemCount()) {
str = list.GetItemText(nIdx, 0);
}
}
}
本文总结了后端开发中遇到的问题,重点介绍了在MFC环境下使用CListCtrl控件如何在单选和多选情况下获取选定行的指定列内容。详细阐述了方法一和方法二,特别是利用CListCtrl::GetNextItem函数查找具有特定状态的项。
2万+





