Clistctrl多行刪除總結
阿新 • • 發佈:2019-02-14
CListCtrl選中行有兩種屬性情況,如果設定了Single Selection為TRUE,則只能單選,否則為多選(預設)。
方法一:
int CListCtrl::GetSelectionMark();
返回值:返回選中索引號,否則返回-1
說明:這個函式可以處理單行的情況,但是有一個缺點,它會保留你上次選中的項,所以當你單擊空白的地方時,還會返回上次選中的項。因此在使用快捷鍵實現刪除操作時需要注意這個情況,一般可以配合UINT GetItemState(int nItem,
UINT nMask) const;來判斷。
單行:int nItem = m_listCtrl.GetSelectionMark();
m_listCtrl.DeleteItem(nItem);
方法二:
此種方法完全錯誤!!!!!!!!!!!
說明:這個可以處理單行和多行(連續)的情況
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
if (pos == NULL)
{
TRACE(_T("No items were selected!\n"));
}
else
{
while (pos)
{
int nItem = m_listCtrl.GetNextSelectedItem(pos);
m_listCtrl.DeleteItem(nItem);
// you could do your own processing on nItem here
}
}
方法一:
int CListCtrl::GetSelectionMark();
返回值:返回選中索引號,否則返回-1
說明:這個函式可以處理單行的情況,但是有一個缺點,它會保留你上次選中的項,所以當你單擊空白的地方時,還會返回上次選中的項。因此在使用快捷鍵實現刪除操作時需要注意這個情況,一般可以配合UINT GetItemState(int nItem,
UINT nMask) const;來判斷。
單行:int nItem = m_listCtrl.GetSelectionMark();
m_listCtrl.DeleteItem(nItem);
方法二:
此種方法完全錯誤!!!!!!!!!!!
說明:這個可以處理單行和多行(連續)的情況
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
if (pos == NULL)
{
TRACE(_T("No items were selected!\n"));
}
else
{
while (pos)
{
int nItem = m_listCtrl.GetNextSelectedItem(pos);
m_listCtrl.DeleteItem(nItem);
// you could do your own processing on nItem here
}
}