关于MFC在ListControl中删除选中行

voidCAddress_ListView::OnSdelete(){POSITIONp=m_address_list.GetFirstSelectedItemPosit... void CAddress_ListView::OnSdelete()
{
POSITION p=m_address_list.GetFirstSelectedItemPosition(); //在列表中删除选定行

while (p)
{
int nSelected=m_address_list.GetNextSelectedItem(p);
m_address_list.DeleteItem(nSelected);
m_address_list.GetFirstSelectedItemPosition();
}
POSITION pos = m_address_list.GetFirstSelectedItemPosition();
int m_nIndex = m_address_list.GetNextSelectedItem(pos);

UpdateData(FALSE); // 得到项目索引

}

在网上找到的代码,可以实现功能,但不知道每个函数的意思,能不能烦请高人给加一下注释,解释一下?
展开
 我来答
yzjzgr
推荐于2017-11-22 · TA获得超过283个赞
知道答主
回答量:59
采纳率:0%
帮助的人:49.7万
展开全部
哥跑了下你代码有问题啊,
void CAddress_ListView::OnSdelete()
{
POSITION p=m_address_list.GetFirstSelectedItemPosition(); //获取首选中行位置
while (p)
{
int nSelected=m_address_list.GetNextSelectedItem(p); //获取选中行的索引
m_address_list.DeleteItem(nSelected); //根据索引删除
p = m_address_list.GetFirstSelectedItemPosition(); //这里跟你不一样,如果不是这样写的话,会删错位的,比如你选了1,2两行,当删第一行后,如果跟你上面代码一样,第二次删会删到原先的第三行去, 这个语句重新计算选中行在删掉一条后的listctl中位置
}
POSITION pos = m_address_list.GetFirstSelectedItemPosition();//这行哥删了
int m_nIndex = m_address_list.GetNextSelectedItem(pos);//这行哥删了

UpdateData(FALSE); // 哥把这行删了也是可以的

}
夏侯南溪
2013-09-15 · TA获得超过222个赞
知道小有建树答主
回答量:141
采纳率:0%
帮助的人:98.5万
展开全部
百度了一下 至少三个网页的方法是错的 我真是呵了一呵又一呵 我呵呵呵呵呵
看看这位高手的代码 才是对的 真不知道这些人怎么想的 错都能错成一样 太无语了
http://blog.csdn.net/testcs_dn/article/details/7612410
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式