对以前的改进MFC略缩图控件改进
原创
©著作权归作者所有:来自51CTO博客作者mb63982c735c3d9的原创作品,请联系作者获取转载授权,否则将追究法律责任
以前写了一篇日记, 显示略缩图,见
《自绘列表框控件显示略缩图----再稍微改进点点。。》
这次给他加点改进,就是增加删除被勾选的图片。。。
增加两个函数:
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;
}