以前写了一篇日记, 显示略缩图,见

《​​自绘列表框控件显示略缩图----再稍微改进点点。。​​》



这次给他加点改进,就是增加删除被勾选的图片。。。

增加两个函数:


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;
}