CListCtrl中,以最快的速度获取选中的条目索引

ding1188 2009-07-28 09:54:20
CListCtrl中有几十万的条目,用遍历获取选中的条目索引实在太慢了。各位有什么好办法吗?
...全文
106 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangchao918628 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 spring203 的回复:]
当然了 鼠标, 左右键 单击双击都要做的,我想楼主也需要这个(肯定要处理右键菜单什么的)!
[/Quote]
处理左键或者右键单击消息;
pNMLISTView->item,选中的行!
zhuweiping2003 2009-07-28
  • 打赏
  • 举报
回复
2楼就很OK呀
spring203 2009-07-28
  • 打赏
  • 举报
回复
当然了 鼠标, 左右键 单击双击都要做的,我想楼主也需要这个(肯定要处理右键菜单什么的)!
spring203 2009-07-28
  • 打赏
  • 举报
回复
补充, 还得处理BOOL SetItemState( int nItem, UINT nState, UINT nMask );选中的,
记得用m_nItem = nItem;
spring203 2009-07-28
  • 打赏
  • 举报
回复
楼主, 响应下CListCtrl的选中notify消息(NM_CLICK, 左键按下), 用个成员变量,保存那个ITEMID值好了,
帖下伪代码:
LVHITTESTINFO lvhti;
CPoint ptAction;
::GetCursorPos(&ptAction);
m_ListCtrl.ScreenToClient(&ptAction);
lvhti.pt = ptAction;
m_ListCtrlSubItemHitTest(&lvhti);
m_nItem = lvhti.iItem; //这个就是你左键按下的选中的
bragi523 2009-07-28
  • 打赏
  • 举报
回复
只能遍历吧
fengrx 2009-07-28
  • 打赏
  • 举报
回复
重载控件的选取事件,将用户选择的条目保存下来(保存为array、LIST、MAP),在提交时直接从保存的array操作。

在数据量大时操作界面控件确实慢。
fishion 2009-07-28
  • 打赏
  • 举报
回复
POSITION pos = m_myListCtrl.GetFirstSelectedItemPosition();
if (pos == NULL)
{
TRACE(_T("No items were selected!\n"));
}
else
{
while (pos)
{
int nItem = m_myListCtrl.GetNextSelectedItem(pos);
TRACE(_T("Item %d was selected!\n"), nItem);
// you could do your own processing on nItem here
}
}
快乐鹦鹉 2009-07-28
  • 打赏
  • 举报
回复
int nSel = GetNextItem(-1,LVNI_SELECTED);
就可以了啊

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧