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

📄 folderdlg.cpp

📁 PocketPC上很好用的文件管理器,而且里面的封装性很好,学windows mobile开发的兄弟,值得一看
💻 CPP
字号:
//FolderDlg.cpp
#include "GSFinder.h"
#include "FolderDlg.h"

CFolderDlg* pfd;
///////////////////////////////////////////////////////////////
void CFolderDlg::CreateNewFolder(HWND hDlg)
{
	HWND hTV = GetDlgItem(hDlg, IDC_TREE_FOLDER);

	TCHAR szPath[MAX_PATH] = _T("");
	TCHAR szTemp[MAX_PATH] = _T("");
	TCHAR szName[MAX_PATH] = _T("");
	
	HTREEITEM hTreeItem = TreeView_GetSelection(hTV);
	TVITEM tvi;
	tvi.mask = TVIF_TEXT | TVIF_HANDLE;
	tvi.pszText = szName;
	tvi.cchTextMax = MAX_PATH;
	tvi.hItem = hTreeItem;
	TreeView_GetItem(hTV, &tvi);
	if (wcscmp(szName, GetRootName()) != 0)
	{
		wcscpy(szPath, szName);
		hTreeItem = TreeView_GetParent(hTV, hTreeItem);
		while (hTreeItem)
		{
			tvi.hItem = hTreeItem;
			TreeView_GetItem(hTV, &tvi);
			if (wcscmp(szName, GetRootName()) != 0)
				wsprintf(szTemp, _T("%s\\%s"), szName, szPath);
			else
				wsprintf(szTemp, _T("\\%s"), szPath);
			wcscpy(szPath, szTemp);
			hTreeItem = TreeView_GetParent(hTV, hTreeItem);
		}
	}
	else
	{
		//MOD TODA
//		wcscpy(szPath, _T(""));
		szPath[0] = 0x00;
	}

	int nCount = 1;
	BOOL bCreate = FALSE;
	TCHAR szNewFolderName[MAX_PATH];
	while (!bCreate)
	{
		TCHAR szNewFolderPath[MAX_PATH] = _T("");
		if (nCount>1)
			wsprintf(szNewFolderName, IDS_FMT_NEWFOLDERNAME1, nCount);
		else
			wsprintf(szNewFolderName, IDS_FMT_NEWFOLDERNAME);

		wsprintf(szNewFolderPath, _T("%s\\%s"), szPath, szNewFolderName);
		
		bCreate = CreateDirectory(szNewFolderPath, NULL);
		nCount++;
		if (nCount > 1024)
		{
			MessageBox(hDlg, IDS_MSG_CANNOTCREATEFOLDER, NULL, MB_OK|MB_ICONSTOP);
			return;
		}
	}

	HTREEITEM hParent = TreeView_GetSelection(hTV);
	TVINSERTSTRUCT tvis;
	tvis.hParent = hParent;
	tvis.hInsertAfter = TVI_SORT;
	tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
	tvis.item.pszText = szNewFolderName;
	tvis.item.iImage = 1;
	tvis.item.iSelectedImage = 1;
	hTreeItem = TreeView_InsertItem(hTV, &tvis);
	TreeView_Expand(hTV, hParent, TVE_EXPAND);
	TreeView_SelectItem(hTV, hTreeItem);
	SetFocus(hTV);

	m_bRefresh = TRUE;
}
///////////////////////////////////////////////////////////////
void CFolderDlg::LoadChildFolder(HWND hDlg, HTREEITEM hParent, LPCTSTR szPath)
{
	HWND hTreeView = GetDlgItem(hDlg, IDC_TREE_FOLDER);

	WIN32_FIND_DATA finddata;
	TCHAR szTemp[MAX_PATH];
	HTREEITEM hTreeItem;
	wsprintf(szTemp, _T("%s\\*.*"), szPath);

	HANDLE hFind = FindFirstFile(szTemp, &finddata);
	if (hFind != INVALID_HANDLE_VALUE)
	{
		BOOL bRet = TRUE;
		do
		{
			if (wcsicmp(finddata.cFileName, _T("Recycled")) != 0 &&
				(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
			{
				TVINSERTSTRUCT tvis;
				tvis.hParent = hParent;
				tvis.hInsertAfter = TVI_SORT;
				tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
				tvis.item.pszText = finddata.cFileName;
			
				if (finddata.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) {
					tvis.item.iImage = 3;
					tvis.item.iSelectedImage = 3;
				}
				//MOD TODA
//				else if (wcsicmp(finddata.cFileName, _T("My Documents")) == 0) {
				else if (wcsicmp(finddata.cFileName, g_MainWnd.m_lpszMyDocument) == 0) {
					tvis.item.iImage = 4;
					tvis.item.iSelectedImage = 4;
				}
				else {
					tvis.item.iImage = 1;
					tvis.item.iSelectedImage = 2;
				}


				hTreeItem = TreeView_InsertItem(hTreeView, &tvis);
				wsprintf(szTemp, _T("%s\\%s"), szPath, finddata.cFileName);
				LoadChildFolder(hDlg, hTreeItem, szTemp);
			}
		}
		while (FindNextFile(hFind, &finddata));
		FindClose(hFind);
	}

	TreeView_SortChildren(hTreeView, hParent, 0);
}
///////////////////////////////////////////////////////////////
void CFolderDlg::OnInitDialog(HWND hDlg)
{
	HWND hTreeView = GetDlgItem(hDlg, IDC_TREE_FOLDER);

	m_bRefresh = FALSE;
	m_hImageList = NULL;
	HICON hIcon;

	CenterWindow(hDlg);

	if (wcslen(m_lpszTitle))
		SetWindowText(hDlg, m_lpszTitle);

	//僀儊乕僕儕僗僩嶌惉
	m_hImageList = ImageList_Create(16, 16, ILC_COLOR|ILC_MASK, 1, 2);
	AddRootIcon(m_hImageList);
	hIcon = (HICON)LoadImage(g_hInst, (LPCTSTR)IDI_FOLDER_S, IMAGE_ICON, 16, 16, 0);
	ImageList_AddIcon(m_hImageList, hIcon);
	DestroyIcon(hIcon);
	hIcon = (HICON)LoadImage(g_hInst, (LPCTSTR)IDI_FOLDERO_S, IMAGE_ICON, 16, 16, 0);
	ImageList_AddIcon(m_hImageList, hIcon);
	DestroyIcon(hIcon);
	hIcon = (HICON)LoadImage(g_hInst, (LPCTSTR)IDI_TEMP_S, IMAGE_ICON, 16, 16, 0);
	ImageList_AddIcon(m_hImageList, hIcon);
	DestroyIcon(hIcon);
	hIcon = (HICON)LoadImage(g_hInst, (LPCTSTR)IDI_MYDOCUMENTS_S, IMAGE_ICON, 16, 16, 0);
	ImageList_AddIcon(m_hImageList, hIcon);
	DestroyIcon(hIcon);

	TreeView_SetImageList(hTreeView, m_hImageList, TVSIL_NORMAL);

	SetWindowLong(hTreeView, GWL_STYLE, GetWindowLong(hTreeView, GWL_STYLE)|TVS_HASBUTTONS|TVS_HASLINES|TVS_SHOWSELALWAYS);
	
	//僼僅儖僟撉傒崬傒
	HCURSOR hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));

	TVINSERTSTRUCT tvis;
	tvis.hParent = NULL;
	tvis.hInsertAfter = TVI_SORT;
	tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
	tvis.item.pszText = (LPTSTR)GetRootName();
	tvis.item.iImage = 0;
	tvis.item.iSelectedImage = 0;
	HTREEITEM hRoot = TreeView_InsertItem(hTreeView, &tvis);
	LoadChildFolder(hDlg, hRoot, _T(""));
	TreeView_Expand(hTreeView, hRoot, TVE_EXPAND);

	//僇儗儞僩僼僅儖僟傪僙僢僩
	LPCTSTR lpszStart = wcschr(g_MainWnd.m_ListView.m_szCurrentFolder, _T('\\'));
	HTREEITEM hParent = hRoot;
	while (lpszStart)
	{
		TCHAR szName[MAX_PATH] = _T("");
		LPCTSTR lpszEnd = wcschr(lpszStart + 1, _T('\\'));
		if (lpszEnd)
			wcsncpy(szName, ++lpszStart, lpszEnd - lpszStart);
		else
			wcscpy(szName, ++lpszStart);
		HTREEITEM hChild = TreeView_GetChild(hTreeView, hParent);
		while (hChild)
		{
			TCHAR szChildName[MAX_PATH] = _T("");
			TVITEM tvi;
			tvi.mask = TVIF_TEXT | TVIF_HANDLE;
			tvi.pszText = szChildName;
			tvi.cchTextMax = MAX_PATH;
			tvi.hItem = hChild;
			TreeView_GetItem(hTreeView, &tvi);
			if (wcscmp(szName, szChildName) == 0)
			{
				TreeView_SelectItem(hTreeView, hChild);
				hParent = hChild;
				break;
			}

			hChild = TreeView_GetNextItem(hTreeView, hChild, TVGN_NEXT);
		}
		if (!hChild) break;

		lpszStart = wcschr(lpszStart, _T('\\'));
	}
	SetCursor(hCursor);
}
///////////////////////////////////////////////////////////////
void CFolderDlg::OnOK(HWND hDlg)
{
	HWND hTV = GetDlgItem(hDlg, IDC_TREE_FOLDER);

	TCHAR szPath[MAX_PATH] = _T("");
	TCHAR szTemp[MAX_PATH] = _T("");
	TCHAR szName[MAX_PATH] = _T("");
	
	HTREEITEM hTreeItem = TreeView_GetSelection(hTV);
	TVITEM tvi;
	tvi.mask = TVIF_TEXT | TVIF_HANDLE;
	tvi.pszText = szName;
	tvi.cchTextMax = MAX_PATH;
	tvi.hItem = hTreeItem;
	TreeView_GetItem(hTV, &tvi);
	if (wcscmp(szName, GetRootName()) != 0)
	{
		wcscpy(szPath, szName);
		hTreeItem = TreeView_GetParent(hTV, hTreeItem);
		while (hTreeItem)
		{
			tvi.hItem = hTreeItem;
			TreeView_GetItem(hTV, &tvi);
			if (wcscmp(szName, GetRootName()) != 0)
				wsprintf(szTemp, _T("%s\\%s"), szName, szPath);
			else
				wsprintf(szTemp, _T("\\%s"), szPath);
			wcscpy(szPath, szTemp);
			hTreeItem = TreeView_GetParent(hTV, hTreeItem);
		}
		
		wcscpy(m_lpszPath, szPath);
	}
	else
	{
		//MOD TODA
//		wcscpy(m_lpszPath, _T(""));
		m_lpszPath[0] = 0x00;
	}

	EndDialog(hDlg, IDOK);
}
///////////////////////////////////////////////////////////////
LRESULT CALLBACK FolderDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	switch (message)
	{
		case WM_INITDIALOG:
		{
			pfd->OnInitDialog(hDlg);
			return TRUE;
		}
		case WM_COMMAND:
		{
			wmId    = LOWORD(wParam); 
			wmEvent = HIWORD(wParam); 
			switch (wmId)
			{
				case IDOK :
				{
					pfd->OnOK(hDlg);
					return TRUE;
				}
				case IDCANCEL:
				{
					EndDialog(hDlg, LOWORD(wParam));
					return TRUE;
				}
				case IDC_CREATE_FOLDER:
				{
					pfd->CreateNewFolder(hDlg);
					return TRUE;
				}
				case IDC_RENAME_FOLDER:
				{
					pfd->OnRenameFolder(hDlg);
					return TRUE;
				}
			}
			break;
		}
	}
    return FALSE;
}
///////////////////////////////////////////////////////////////
int CFolderDlg::ShowFolderDlg(LPCTSTR szTitle, LPTSTR szPath, int nSize)
{
	pfd = this;

	m_lpszTitle = szTitle;
	m_lpszPath = szPath;
	m_nSize = nSize;

	int nRet = DialogBox(g_hInst, (LPCTSTR)IDD_FOLDER_DLG, g_MainWnd.m_hWnd, (DLGPROC)FolderDlgProc);

	pfd = NULL;

	return nRet;
}
///////////////////////////////////////////////////////////////
LRESULT CALLBACK RenameDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	switch (message)
	{
		case WM_INITDIALOG:
		{
			CenterWindow(hDlg);
			SetWindowText(GetDlgItem(hDlg, IDC_EDIT_OLDNAME), pfd->m_lpszName);
			SetWindowText(GetDlgItem(hDlg, IDC_EDIT_NEWNAME), pfd->m_lpszName);
			SetFocus(GetDlgItem(hDlg, IDC_EDIT_NEWNAME));
			SendMessage(GetDlgItem(hDlg, IDC_EDIT_NEWNAME), EM_SETSEL, 0, -1);
			return FALSE;
		}
		case WM_COMMAND:
		{
			wmId    = LOWORD(wParam); 
			wmEvent = HIWORD(wParam); 
			// 儊僯儏乕崁栚傪暘椶暿偵嬫愗傝傑偡:
			switch (wmId)
			{
				case IDOK :
				{
					GetWindowText(GetDlgItem(hDlg, IDC_EDIT_NEWNAME), pfd->m_lpszName, MAX_PATH);
					EndDialog(hDlg, IDOK);
					return TRUE;
				}
				case IDCANCEL:
				{
					EndDialog(hDlg, IDCANCEL);
					return TRUE;
				}
			}
			break;
		}
		case WM_CLOSE:
		{
			EndDialog(hDlg, IDCANCEL);
			return TRUE;
		}
	}
    return FALSE;
}
///////////////////////////////////////////////////////////////
void CFolderDlg::OnRenameFolder(HWND hDlg)
{
	HWND hTV = GetDlgItem(hDlg, IDC_TREE_FOLDER);
	TCHAR szOldName[MAX_PATH] = _T("");
	TCHAR szNewName[MAX_PATH] = _T("");
	m_lpszName = szNewName;

	HTREEITEM hSelItem = TreeView_GetSelection(hTV);
	TVITEM tvi;
	tvi.mask = TVIF_TEXT | TVIF_HANDLE;
	tvi.pszText = szOldName;
	tvi.cchTextMax = MAX_PATH;
	tvi.hItem = hSelItem;
	TreeView_GetItem(hTV, &tvi);
	wcscpy(szNewName, szOldName);
	if (wcscmp(m_lpszName, GetRootName())!=0)
	{
		if (DialogBox(g_hInst, (LPCTSTR)IDD_RENAME_DLG, hDlg, (DLGPROC)RenameDlgProc)==IDOK)
		{
			if (wcscmp(szOldName, szNewName)!=0)
			{
				//柤慜偺曄峏
				TCHAR szName[MAX_PATH] = _T("");
				TCHAR szPath[MAX_PATH] = _T("");
				TCHAR szTemp[MAX_PATH] = _T("");
				HTREEITEM hTreeItem = TreeView_GetParent(hTV, hSelItem);
				TVITEM tvi;
				tvi.mask = TVIF_TEXT | TVIF_HANDLE;
				tvi.pszText = szName;
				tvi.cchTextMax = MAX_PATH;
				while (hTreeItem)
				{
					tvi.hItem = hTreeItem;
					TreeView_GetItem(hTV, &tvi);
					if (wcscmp(szName, GetRootName()) != 0)
						wsprintf(szTemp, _T("%s\\%s"), szName, szPath);
					else
						wsprintf(szTemp, _T("\\%s"), szPath);
					wcscpy(szPath, szTemp);
					hTreeItem = TreeView_GetParent(hTV, hTreeItem);
				}
				wcscpy(szName, szOldName);
				wsprintf(szOldName, _T("%s%s"), szPath, szName);
				wcscpy(szName, szNewName);
				wsprintf(szNewName, _T("%s%s"), szPath, szName);
				if (MoveFile(szOldName, szNewName))
				{
					TVITEM tvi;
					tvi.mask = TVIF_TEXT | TVIF_HANDLE;
					tvi.pszText = szName;
					tvi.cchTextMax = MAX_PATH;
					tvi.hItem = hSelItem;
					TreeView_SetItem(hTV, &tvi);
					m_bRefresh = TRUE;
				}
				else
				{
					MessageBox(hDlg, IDS_MSG_CANNOTCHANGENAME1, NULL, MB_OK|MB_ICONSTOP);
				}
			}
		}
	}
	else
	{
		wcscat(m_lpszName, IDS_FMT_RENAME);
		MessageBox(hDlg, m_lpszName, NULL, MB_OK|MB_ICONEXCLAMATION);
	}
	SetFocus(hTV);
}
///////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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