以前写了一篇日记, 显示略缩图,见
《自绘列表框控件显示略缩图----再稍微改进点点。。》
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 fileCString fileName;if (m_strImageDir.Right(1) == TEXT("\\") )fileName.Format( TEXT("%s%s"), m_strImageDir, m_VectorImageNames[nItem] );elsefileName.Format( TEXT("%s\\%s"),m_strImageDir, m_VectorImageNames[nItem] );return fileName;
}BOOL CListImageCtrl::ClearChecked(int nSubItem /*= -1*/)
{// hold the window update to avoid flickingSetRedraw(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;
}