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

📄 folderdlgppc.cpp

📁 PocketPC上很好用的文件管理器,而且里面的封装性很好,学windows mobile开发的兄弟,值得一看
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//FolderDlgPPC.cpp
#include "GSFinder.h"
#include "FolderDlgPPC.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
		wcscpy(szPath, _T(""));

	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::OnInitDialog(HWND hDlg)
{
	HWND hTreeView = GetDlgItem(hDlg, IDC_TREE_FOLDER);

	m_bRefresh = FALSE;
	m_hImageList = NULL;
	HICON hIcon;

	SHINITDLGINFO shidi;
	shidi.dwMask = SHIDIM_FLAGS;
	shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN;
	shidi.hDlg = hDlg;
	SHInitDialog(&shidi);

	SendMessage(hTreeView, CCM_SETVERSION, COMCTL32_VERSION, 0);

	if (wcslen(m_lpszTitle))
	{
		SetWindowText(hDlg, m_lpszTitle);
		SetDlgItemText(hDlg, IDC_TITLE, m_lpszTitle);
	}

	//僒僀僘挷惍 (TreeView)
	RECT rc;
	POINT pt;
	GetWindowRect(hTreeView, &rc);
	pt.x = rc.left; pt.y = rc.top;
	ScreenToClient(hDlg, &pt);
	MoveWindow(hTreeView, pt.x, pt.y, GetSystemMetrics(SM_CXSCREEN)-2, GetSystemMetrics(SM_CYSCREEN)-77, TRUE);
	

	//僀儊乕僕儕僗僩嶌惉
	m_hImageList = ImageList_Create(16, 16, ILC_COLOR|ILC_MASK, 1, 2);
	hIcon = (HICON)LoadImage(g_hInst, (LPCTSTR)IDI_ROOT, IMAGE_ICON, 16, 16, 0);
	ImageList_AddIcon(m_hImageList, hIcon);
	DeleteObject(hIcon);
	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 | TVIF_CHILDREN;
	tvis.item.pszText = (LPTSTR)GetRootName();
	tvis.item.iImage = 0;
	tvis.item.iSelectedImage = 0;
	tvis.item.cChildren = 1;
	HTREEITEM hRoot = TreeView_InsertItem(hTreeView, &tvis);
	TreeView_Expand(hTreeView, hRoot, TVE_EXPAND);

	//僇儗儞僩僼僅儖僟傪僙僢僩
	SetCurrentFolder(hTreeView, m_lpszPath);

	SipShowIM(SIPF_OFF);
	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);
	GetTree(hTV, hTreeItem, m_lpszPath);
	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 ID_CREATE_FOLDER:
				{
					pfd->CreateNewFolder(hDlg);
					return TRUE;
				}
				case ID_RENAME_FOLDER:
				{
					pfd->OnRenameFolder(hDlg);
					return TRUE;
				}
			}
			break;
		}
		case WM_NOTIFY:
		{
			NMHDR* lpnmh = (NMHDR*)lParam;
			if (lpnmh->code == TVN_ITEMEXPANDING/* && lpnmh->idFrom == IDC_TREE_FOLDER*/)
			{
				pfd->OnItemExpanding((NMTREEVIEW*)lpnmh);
				return TRUE;
			}
			if (lpnmh->code == TVN_ITEMEXPANDED/* && lpnmh->idFrom == IDC_TREE_FOLDER*/)
			{
				pfd->OnItemExpanded((NMTREEVIEW*)lpnmh);
				return TRUE;
			}
			if (lpnmh->code == GN_CONTEXTMENU && lpnmh->idFrom == IDC_TREE_FOLDER)
			{
				if (TreeView_GetSelection(GetDlgItem(hDlg, IDC_TREE_FOLDER)))
				{
					NMRGINFO* lpnmri = (NMRGINFO*)lParam;
					//MOD START TODA
//					HMENU hMenu = GetSubMenu(g_MainWnd.m_ListView.m_hMenuPopup, 4);
					HMENU hMenu = GetSubMenu(g_MainWnd.m_ListView.m_hMenuPopup, 6);
					//MOD END
					TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_TOPALIGN, lpnmri->ptAction.x, lpnmri->ptAction.y, 0, hDlg, NULL);
				}
				return TRUE;
			}
			break;
		}
		case WM_CTLCOLORSTATIC:
			return DefDlgCtlColorStaticProc(hDlg, wParam, lParam);
	}
    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;
		}
		case WM_PAINT:
			return DefDlgPaintProc(hDlg, wParam, lParam);
		case WM_CTLCOLORSTATIC:
			return DefDlgCtlColorStaticProc(hDlg, wParam, lParam);
	}
    return FALSE;
}

⌨️ 快捷键说明

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