我想删除ListView中所有选定的行。写了下面这些:
POSITION pos = list.GetFirstSelectedItemPosition();
if (pos == NULL)
AfxMessageBox("No items were selected!");
else
{
while (pos)
{
int nItem = list.GetNextSelectedItem(pos);
list.DeleteItem(nItem);
}
}
但是结果不对。应该是因为删除前面一行后,导致后面一行的nItem变化,但是我搞不清楚这个POSITION它是怎么给的。这种问题应该怎么解决?
POSITION pos = list.GetFirstSelectedItemPosition();
if (pos == NULL)
AfxMessageBox("No items were selected!");
else
{
while (pos)
{
int nItem = list.GetNextSelectedItem(pos);
list.DeleteItem(nItem);
}
}
但是结果不对。应该是因为删除前面一行后,导致后面一行的nItem变化,但是我搞不清楚这个POSITION它是怎么给的。这种问题应该怎么解决?
解决方案 »
- 在vc中结束IE进程时遇见的问题,希望各位一起来讨论讨论!!
- 帮我解释一下这几句话的意思啊,谢谢
- 如何SDI程序的客户区大小
- 【求助】listctrl中加按钮的问题,每增加一行对应第n列加一个按钮的问题
- ActiveX控件在IE中有关退格键的处理办法,请教!
- 我想在对话框中得到ComboBox的指针。
- 请问如何关闭一个已经存在的tcp连接
- 如何拉动时产生虚框?
- 我想把一个已知的网页在html视图中显示,但我不想通过外部文件访问,而是作成资源引入后访问?谁能帮忙!谢谢!
- 如何显示动画?
- 这个应该怎么做
- 如何从CMenu继承一个MFC类??Insert -> New Class, 基类中没有CMenu!
然后malloc一个int数组,将选中的item的序号填进去
接着,从这个数组的尾部向前一个一个delete之
这样先删除的都是后面的,不会影响前面的序号的变化
UINT i, uSelectedCount = m_ImgList.GetSelectedCount();
POSITION pos = m_ImgList.GetFirstSelectedItemPosition();
int nItem = -1;
if (uSelectedCount > 0)
{
for (i=0;i <uSelectedCount;i++)
{
nItem = m_ImgList.GetNextItem(-1, LVNI_SELECTED);
//ASSERT(nItem != -1);
m_ImgList.DeleteItem(nItem); }
}
int i,iState;
int nItemSelected=m_ListCtrl.GetSelectedCount();//所选表项数
int nItemCount=m_ListCtrl.GetItemCount();//表项总数
if(nItemSelected<1) return;
for(i=nItemCount-1;i>=0;i--){
iState=m_ListCtrl.GetItemState(i,LVIS_SELECTED);
if(iState!=0) m_ListCtrl.DeleteItem(i);
}