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

📄 folderdlgppc.cpp

📁 PocketPC上很好用的文件管理器,而且里面的封装性很好,学windows mobile开发的兄弟,值得一看
💻 CPP
📖 第 1 页 / 共 2 页
字号:
///////////////////////////////////////////////////////////////
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)
	{
		BOOL bSetSip = FALSE;
		SIPINFO si;
		memset(&si, 0, sizeof(SIPINFO));
		si.cbSize = sizeof(SIPINFO);
		SipGetInfo(&si);
		if ((si.fdwFlags&SIPF_ON)!=SIPF_ON)
		{
			SipShowIM(SIPF_ON);
			bSetSip = TRUE;
		}
		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);
			}
		}
		if (bSetSip)
			SipShowIM(SIPF_OFF);
	}
	else
	{
		wcscat(m_lpszName, IDS_FMT_RENAME);
		MessageBox(hDlg, m_lpszName, NULL, MB_OK|MB_ICONEXCLAMATION);
	}
	SetFocus(hTV);
}

///////////////////////////////////////////////////////////////
// GSFinder + TQ偺僐乕僪傪堷偭挘偭偰偒偨丅
// Qta偝傫偁傝偑偲乕両両
// -- Ex.Q --
// 僣儕乕 價儏乕偺崁栚偺愨懳僷僗傪媮傔傞
void CFolderDlg::GetTree(HWND hwndTV, HTREEITEM hItem, LPTSTR pszKey)
{
	TCHAR szName[MAX_PATH];

    TV_ITEM tvi;
    memset (&tvi, 0, sizeof (tvi));

	// 恊傪庢摼
    HTREEITEM hParent;
	hParent = TreeView_GetParent (hwndTV, hItem);
    if (hParent) { 
        // 崁栚偺恊偺恊丒丒丒傪庢摼偡傞
        GetTree (hwndTV, hParent, pszKey);

        // 崁栚偺柤慜傪庢摼偡傞
		tvi.mask       = TVIF_TEXT;
		tvi.hItem      = hItem;
		tvi.pszText    = szName;
		tvi.cchTextMax = MAX_PATH;
		TreeView_GetItem(hwndTV, &tvi);

		// 儖乕僩偱側偗傟偽亸傪偮偗傞
		if (wcscmp(pszKey, GetRootName()) != 0)
			lstrcat (pszKey, TEXT("\\"));
		else
			lstrcpy (pszKey, TEXT("\\"));

		// 恊偺僷僗偵崱偺僼僅儖僟柤傪捛壛
		lstrcat (pszKey, szName);
	} else {
        // 崁栚偺柤慜傪庢摼偡傞
		lstrcpy(pszKey, _T(""));
        szName[0]      = _T('\0');
        tvi.mask       = TVIF_TEXT | TVIF_PARAM;
        tvi.hItem      = hItem;
        tvi.pszText    = szName;
        tvi.cchTextMax = MAX_PATH;
		TreeView_GetItem(hwndTV, &tvi);
    }
}

///////////////////////////////////////////////////////////////
// CountChildren - 僉乕偺僒僽僉乕偺悢傪挷傋傞
//
int CFolderDlg::CountChildren(LPTSTR pszPath, LPTSTR pszKey)
{
	int rc;
	TCHAR szName[MAX_PATH];
	HANDLE ff;
	WIN32_FIND_DATA wfd;
    DWORD dwCnt = 0;
	wsprintf (szName, _T("%s\\%s\\*.*"), pszPath, pszKey);
	
	ff = FindFirstFile( szName, &wfd );
	if (ff != INVALID_HANDLE_VALUE) {
		while (1) {
			if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
				dwCnt++;
				break;
			}
			rc = FindNextFile (ff, &wfd);
			if (rc == 0)
				break;
		}
		FindClose(ff);
    }
	return dwCnt;
}

///////////////////////////////////////////////////////////////
// EnumChildren - 僉乕偺僒僽僉乕傪楍嫇偡傞
int CFolderDlg::EnumChildren(HWND hwndTV, HTREEITEM hParent, LPTSTR pszPath)
{
	int rc;
    DWORD nChild;
	HANDLE ff;
	WIN32_FIND_DATA wfd;
	TCHAR szName[MAX_PATH];
	TVINSERTSTRUCT tvis;
	DWORD dwCnt = 0;

	wsprintf (szName, _T("%s\\*.*"), pszPath);

	ff = FindFirstFile (szName, &wfd);
	if (ff != INVALID_HANDLE_VALUE) {
		while (1) {
			if (wcsicmp(wfd.cFileName, _T("Recycled")) != 0 &&
				(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
				// 壓埵偺僨傿儗僋僩儕偑偁傞偐専嵏
				nChild = CountChildren (pszPath, wfd.cFileName);

				// 僣儕乕 價儏乕 僐儞僩儘乕儖偵僉乕傪憓擖偡傞
				tvis.hParent      = hParent;
				tvis.hInsertAfter = TVI_SORT;
				tvis.item.mask    = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN;
				tvis.item.pszText = wfd.cFileName;
				tvis.item.cChildren = (nChild ? 1 : 0);

				if (wfd.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) {
					tvis.item.iImage = 3;
					tvis.item.iSelectedImage = 3;
				}
				else if (wcsicmp(wfd.cFileName, _T("My Documents")) == 0) {
					tvis.item.iImage = 4;
					tvis.item.iSelectedImage = 4;
				}
				else {
					tvis.item.iImage = 1;
					tvis.item.iSelectedImage = 2;
				}

				TreeView_InsertItem(hwndTV, &tvis);

				dwCnt++;
			}
			rc = FindNextFile (ff, &wfd);
			if (rc == 0)
				break;
		}
		FindClose(ff);
	}

    // 僒僽僉乕偑側偄応崌偼揥奐儃僞儞傪嶍彍偡傞
    TVITEM tvi;
	tvi.hItem = hParent;
	tvi.mask  = TVIF_CHILDREN;
    if (dwCnt == 0)
        tvi.cChildren = 0;
    else
        tvi.cChildren = 1;
	TreeView_SetItem (hwndTV, &tvi);

	// 僜乕僩
	TreeView_SortChildren(hwndTV, hParent, 0);

	return dwCnt;
}

///////////////////////////////////////////////////////////////
void CFolderDlg::OnItemExpanded(NMTREEVIEW* lpnmtv)
{
	// 師偵僽儔儞僠傪揥奐偡傞偲偒偵夵傔偰楍嫇偡傞偺偱僒僽僉乕傪嶍彍偡傞
	if (lpnmtv->action == TVE_COLLAPSE) {
		HTREEITEM hChild;
		HTREEITEM hNext;

		hChild = TreeView_GetChild (lpnmtv->hdr.hwndFrom, lpnmtv->itemNew.hItem);
		while (hChild) {
			hNext = TreeView_GetNextItem (lpnmtv->hdr.hwndFrom, hChild, TVGN_NEXT);
			TreeView_DeleteItem (lpnmtv->hdr.hwndFrom, hChild);
			hChild = hNext;
		}
	}
}

///////////////////////////////////////////////////////////////
void CFolderDlg::OnItemExpanding(NMTREEVIEW* lpnmtv)
{
	if (lpnmtv->action == TVE_EXPAND) {
		TCHAR szKey[MAX_PATH];
		//僼僅儖僟柤傪庢摼
		GetTree (lpnmtv->hdr.hwndFrom, lpnmtv->itemNew.hItem, szKey);
		//巕僣儕乕傪楍嫇偡傞
		EnumChildren (lpnmtv->hdr.hwndFrom, lpnmtv->itemNew.hItem, szKey);
	}
}

void CFolderDlg::SetCurrentFolder(HWND hwndTV, LPCTSTR lpszPath)
{
	LPCTSTR lpszStart = wcschr(lpszPath, _T('\\'));
	HTREEITEM hSelectItem = TreeView_GetRoot(hwndTV);

	HTREEITEM hParent = hSelectItem;
	TreeView_Expand(hwndTV, hParent, TVE_EXPAND);

	while (lpszStart)
	{
		TCHAR szName[MAX_PATH] = _T("");
		LPCTSTR lpszEnd = wcschr(lpszStart + 1, _T('\\'));
		if (lpszEnd) {
			int len = lpszEnd - (lpszStart + 1);
			wcsncpy(szName, ++lpszStart, len);
			szName[len] = 0;
		}
		else
			wcscpy(szName, ++lpszStart);

		HTREEITEM hChild = TreeView_GetChild(hwndTV, 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(hwndTV, &tvi);
			if (wcscmp(szName, szChildName) == 0)
			{
				hSelectItem = hParent = hChild;
				TreeView_Expand(hwndTV, hParent, TVE_EXPAND);
				break;
			}

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

		lpszStart = wcschr(lpszStart, _T('\\'));
	}

	TreeView_SelectItem(hwndTV, hSelectItem);
}

⌨️ 快捷键说明

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