⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileview.cpp

📁 这是一款蛮COOL的图像处理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	rList.GetItemText(iItem, iName, szTemp, MAX_PATH);
	strFileName = g_strCurrentDir + szTemp;

	return TRUE;
}

void CFileView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
{
	CString strFileName;
	if(MakeFileNameFromListItem(strFileName))
	{
		if(CGlobal::IsImgFile(strFileName))
		{
			((CQuickImageApp*)AfxGetApp())->m_pImageTemplate->
				OpenDocumentFile(strFileName);
		}
		else
		{
			WIN32_FIND_DATA stFindData;
			HANDLE hFind = FindFirstFile((LPCTSTR)strFileName, &stFindData);
			if (INVALID_HANDLE_VALUE != hFind)
			{
				if(stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
				{
					GetDirView()->ExpendItem(strFileName + _T("\\"));
				}
			}
			FindClose(hFind);
		}		
	}
	
	*pResult = 0;
}

void CFileView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	if(pNMListView->iItem > -1)
	{
		CPoint point = pNMListView->ptAction;
		ClientToScreen(&point);
		point.Offset(5, 5);
		
		CMenu menu;
		VERIFY(menu.LoadMenu(CG_IDR_POPUP_FILE_VIEW));
		
		CMenu* pPopup = menu.GetSubMenu(0);
		ASSERT(pPopup != NULL);
		CWnd* pWndPopupOwner = this;
		
		while (pWndPopupOwner->GetStyle() & WS_CHILD)
			pWndPopupOwner = pWndPopupOwner->GetParent();
		
		pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
			pWndPopupOwner);
	}
	
	*pResult = 0;
}

void CFileView::OnFileRename() 
{
	CDlgRename dlg;
	if(dlg.DoModal() == IDOK)
	{
		CString strTemplate = dlg.m_strTemplate;
		int iStart = dlg.m_iStart;
		char *szFront = new char[strTemplate.GetLength() +1];
		if(NULL == szFront)
		{
			return;
		}
		CString strBack;
		strcpy(szFront, strTemplate);

		char *pDevide = strchr(szFront, '*');
		if(NULL == pDevide)
		{
			strBack = _T("");
		}
		else
		{
			*pDevide = '\0';
			pDevide = strrchr(strTemplate, '*');
			strBack = ++pDevide;
		}

		CString strNewFileName, strOldFileName;
		CListCtrl &rList = GetListCtrl();
		POSITION pos = rList.GetFirstSelectedItemPosition();
		int iItem;
		WIN32_FIND_DATA stFindData;
		HANDLE hFind = NULL;
		char *pNewTitle = NULL;
		CDirView *pDirView = GetDirView();
		ASSERT(NULL != pDirView);

		while(pos)
		{
			iItem = rList.GetNextSelectedItem(pos);
			if(!MakeFileNameFromListItem(strOldFileName, iItem))
			{
				break;
			}
			strNewFileName.Format("%s%s%0d%s",
				g_strCurrentDir, szFront, iStart++, strBack);

			hFind = FindFirstFile((LPCTSTR)strOldFileName, &stFindData);
			if (INVALID_HANDLE_VALUE != hFind)
			{
				if(stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
				{
					pNewTitle = strrchr(strNewFileName, '\\');
					pDirView->SetItemText(strOldFileName, ++pNewTitle);
				}
			}
			FindClose(hFind);

			CFile::Rename(strOldFileName, strNewFileName);
		}

		delete szFront;
		ListFiles();
	}
}

void CFileView::OnUpdateFileRename(CCmdUI* pCmdUI) 
{
/*	CString strFileName;
	if(!MakeFileNameFromListSel(strFileName))
	{
		pCmdUI->Enable(FALSE);
	}
	else
	{
		WIN32_FIND_DATA stFindData;
		HANDLE hFind = FindFirstFile((LPCTSTR)strFileName, &stFindData);
		if (INVALID_HANDLE_VALUE != hFind)
		{
			if(stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				pCmdUI->Enable(FALSE);
			}
		}
		FindClose(hFind);
		pCmdUI->Enable(TRUE);
	}
*/	pCmdUI->Enable(GetListCtrl().GetSelectedCount() > 0);
}

void CFileView::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
	// TODO: Add your control notification handler code here
	CString strNew, strOldFileName, strNewFileName;

	if(!MakeFileNameFromListItem(strOldFileName, pDispInfo->item.iItem))
	{
		return;
	}
	GetListCtrl().GetEditControl()->GetWindowText(strNew);
	strNewFileName.Format("%s%s", g_strCurrentDir, strNew);
	
	WIN32_FIND_DATA stFindData;
	HANDLE hFind = FindFirstFile((LPCTSTR)strOldFileName, &stFindData);
	if (INVALID_HANDLE_VALUE != hFind)
	{
		if(stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			char *pNewTitle = strrchr(strNewFileName, '\\');
			GetDirView()->SetItemText(strOldFileName, ++pNewTitle);
		}
	}
	FindClose(hFind);
	
	CFile::Rename(strOldFileName, strNewFileName);
	GetListCtrl().SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, strNew);
	
	*pResult = 0;
}

void CFileView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	if(nChar == 13)//VK_ENTER
	{
		CString strFileName;
		if(MakeFileNameFromListItem(strFileName))
		{
			if(CGlobal::IsImgFile(strFileName))
			{
				((CQuickImageApp*)AfxGetApp())->m_pImageTemplate->
					OpenDocumentFile(strFileName);
			}
			else
			{
				WIN32_FIND_DATA stFindData;
				HANDLE hFind = FindFirstFile((LPCTSTR)strFileName, &stFindData);
				if (INVALID_HANDLE_VALUE != hFind)
				{
					if(stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
					{
						GetDirView()->ExpendItem(strFileName + _T("\\"));
					}
				}
				FindClose(hFind);;
			}		
		}
	}
	else if(nChar == 46)//Delete
	{
		CString strFileName;
		if(MakeFileNameFromListItem(strFileName))
		{
			WIN32_FIND_DATA stFindData;
			HANDLE hFind = FindFirstFile((LPCTSTR)strFileName, &stFindData);
			if (INVALID_HANDLE_VALUE != hFind)
			{
				if(stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
				{
					GetDirView()->DeleteItem(strFileName + _T("\\"));
				}
			}
			DeleteFile(strFileName);
			FindClose(hFind);

			POSITION pos = GetListCtrl().GetFirstSelectedItemPosition();
			GetListCtrl().DeleteItem(GetListCtrl().GetNextSelectedItem(pos));
		}
	}
	
	CListView::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CFileView::OnDirButtons(UINT nID)
{
	CListCtrl &rList = GetListCtrl();
	int iHot = rList.GetNextItem(-1, LVNI_SELECTED);
	switch(nID)
	{
	case ID_DIR_UP:
		GetDirView()->MoveToUpFolder();
		ListFiles();	
		break;
	case ID_DIR_HOME:
		if(iHot != -1)
		{
			rList.SetItemState(iHot,
				~LVIS_SELECTED & ~LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
		}
		rList.SetItemState(0,
			LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
		break;
	case ID_DIR_PREV:
		if(iHot != -1)
		{
			rList.SetItemState(iHot,
				~LVIS_SELECTED & ~LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
			iHot --;
			if(iHot == -1)
			{
				iHot = rList.GetItemCount() -1;
			}
			rList.SetItemState(iHot,
				LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
		}
		else
		{
			rList.SetItemState(rList.GetItemCount() -1,
				LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
		}
		break;
	case ID_DIR_NEXT:
		if(iHot != -1)
		{
			rList.SetItemState(iHot,
				~LVIS_SELECTED & ~LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
			iHot ++;
			if(iHot == rList.GetItemCount())
			{
				iHot = 0;
			}
			rList.SetItemState(iHot,
				LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
		}
		else
		{
			rList.SetItemState(0,
				LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
		}
		break;
	case ID_DIR_END:
		if(iHot != -1)
		{
			rList.SetItemState(iHot,
				~LVIS_SELECTED & ~LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
		}
		rList.SetItemState(rList.GetItemCount() -1,
			LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
		break;
	default:
		break;
	}
}

void CFileView::OnUpdateDirButtons(CCmdUI *pCmdUI)
{
/*	switch(pCmdUI->m_nID)
	{
	case ID_DIR_UP:
		pCmdUI->Enable(TRUE);
		break;
	case ID_DIR_HOME:
		break;
	case ID_DIR_PREV:
		break;
	case ID_DIR_NEXT:
		break;
	case ID_DIR_END:
		break;
	default:
		break;
	}*/
	pCmdUI->Enable(TRUE);
}

int CALLBACK CFileView::SortFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	// lParamSort contains a pointer to the list view control.
	// The lParam of an item is just its index.
	CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
	CString    strItem1 = pListCtrl->GetItemText(lParam1, g_iSortColumn);
	CString    strItem2 = pListCtrl->GetItemText(lParam2, g_iSortColumn);
	
	CString strFile1 = g_strCurrentDir + strItem1;
	CString strFile2 = g_strCurrentDir + strItem2;
	WIN32_FIND_DATA stFindData;
	BOOL bIsFolder1, bIsFolder2;
	
	HANDLE hFind = FindFirstFile((LPCTSTR)strFile1, &stFindData);
	if (INVALID_HANDLE_VALUE != hFind)
	{
		bIsFolder1 = stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
	}
	hFind = FindFirstFile((LPCTSTR)strFile2, &stFindData);
	if (INVALID_HANDLE_VALUE != hFind)
	{
		bIsFolder2 = stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
	}
	FindClose(hFind);
	
	if(bIsFolder1 && !bIsFolder2)
		return -1;
	if(!bIsFolder1 && bIsFolder2)
		return 1;
	return strcmp(strItem1, strItem2);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -