以前写了一篇日记, 显示略缩图,见
http://blog.csdn.net/hemmingway/article/details/7483619
这次给他加点改进,就是增加删除被勾选的图片。。。
增加两个函数:
CString MakeFilename(int nItem);
BOOL ClearChecked(int nSubItem = 0); //clear all checked item
CString CListImageCtrl::MakeFilename(int nItem) { ASSERT(nItem >= 0); ASSERT(nItem < GetItemCount()); if ((nItem < 0) || nItem >= GetItemCount()) return FALSE; ASSERT(!m_VectorImageNames.empty()); // read the image file CString fileName; if (m_strImageDir.Right(1) == TEXT("\\") ) fileName.Format( TEXT("%s%s"), m_strImageDir, m_VectorImageNames[nItem] ); else fileName.Format( TEXT("%s\\%s"),m_strImageDir, m_VectorImageNames[nItem] ); return fileName; } BOOL CListImageCtrl::ClearChecked(int nSubItem /*= -1*/) { // hold the window update to avoid flicking SetRedraw(FALSE); ////////////////////////////////////////////////////////////////////////// ASSERT(nSubItem >= 0); ASSERT(nSubItem < GetColumns()); if ((nSubItem < 0) || nSubItem >= GetColumns()) return FALSE; unsigned int offset = 0; int n = GetItemCount(); for (int nItem = 0; nItem < n; nItem++) { unsigned int idx = nItem-offset; XLISTCTRLDATA *pXLCD = (XLISTCTRLDATA *) CListCtrl::GetItemData(idx); if (!pXLCD) { continue; } if (pXLCD[nSubItem].nCheckedState == 1 ) //checked, delete it { CString file = MakeFilename(idx); DeleteFile(file); m_VectorImageNames.erase(m_VectorImageNames.begin() + idx); //m_ImageListThumb.Remove(idx); //error? this->DeleteItem(idx); offset++; if(m_nSelectedItem == idx) m_nSelectedItem = -1; } } Arrange(LVA_ALIGNTOP); SetRedraw(); return TRUE; }