现在的位置: 首页 > 综合 > 正文

对以前的改进MFC略缩图控件改进

2012年05月24日 ⁄ 综合 ⁄ 共 1410字 ⁄ 字号 评论关闭

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

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

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

抱歉!评论已关闭.