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

📄 fileproperty.cpp

📁 PocketPC上很好用的文件管理器,而且里面的封装性很好,学windows mobile开发的兄弟,值得一看
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	*lpFolderCount += 1;	
}

////////////////////////////////////////////////////////////////
void CFileProperty::PPFileMulti_InitDialog(HWND hDlg)
{
	HCURSOR hCursor =SetCursor(LoadCursor(NULL, IDC_WAIT));
#ifdef __POCKET_PC
	SetDlgItemText(hDlg, IDC_TITLE, m_szTitle);
#endif
	DWORD dwSize = 0;
	DWORD dwFileCount = 0;
	DWORD dwFolderCount = 0;
	for (int i=0; i<m_nCount; i++)
	{
		TCHAR szPath[MAX_PATH];
		//僷僗偺嶌惉
		//ADD START TODA (儖乕僩帪偺僷僗愝掕 - advice by Y.Nagamidori)
		if(0 == wcsicmp(m_lpliinfo[i].szName, GetRootName()))
			szPath[0] = 0x00;
		else
		//ADD END
			wsprintf(szPath, _T("%s\\%s"), m_lpszCurrentFolder, m_lpliinfo[i].szName);

		//僒僀僘庢摼丄僇僂儞僩奐巒
		if (m_lpliinfo[i].nItem == LIST_ITEM_FOLDER)
			GetFolderSizeAndCount(szPath, &dwSize, &dwFileCount, &dwFolderCount);
		else if (m_lpliinfo[i].nItem == LIST_ITEM_FILE)
			GetFileSizeAndCount(szPath, &dwSize, &dwFileCount);
	}
	
	//昞帵
	if (!wcslen(m_lpszCurrentFolder))
		SetWindowText(GetDlgItem(hDlg, IDC_FILE_PATH), GetRootName());
	else
		SetWindowText(GetDlgItem(hDlg, IDC_FILE_PATH), m_lpszCurrentFolder);

	if (m_nCount == 1 && m_lpliinfo[0].nItem == LIST_ITEM_FOLDER)
		dwFolderCount -= 1;

	TCHAR szTemp[128];
	wsprintf(szTemp, IDS_FMT_FOLDERCOUNT, dwFolderCount);
	SetWindowText(GetDlgItem(hDlg, IDC_FOLDER_COUNT), szTemp);
	wsprintf(szTemp, IDS_FMT_FILECOUNT, dwFileCount);
	SetWindowText(GetDlgItem(hDlg, IDC_FILE_COUNT), szTemp);

	TCHAR szSize[64];
	wsprintf(szSize, _T("%d"), dwSize);
	SetFormatInteger(szSize, 64);
	wsprintf(szTemp, IDS_FMT_BYTE, szSize);
	SetWindowText(GetDlgItem(hDlg, IDC_SIZE_BYTE), szTemp);
	SetFormatSize(dwSize, szSize, _T("%s KB"), _T("%s MB"));
	SetWindowText(GetDlgItem(hDlg, IDC_SIZE_KIROBYTE), szSize);

	SetCursor(hCursor);
}

////////////////////////////////////////////////////////////////
LRESULT CALLBACK PPFileMultiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case WM_INITDIALOG:
		{
			pfp->PPFileMulti_InitDialog(hDlg);
			return TRUE;
		}
#ifdef __POCKET_PC
		case WM_PAINT:
			return DefDlgPaintProc(hDlg, wParam, lParam);
		case WM_CTLCOLORSTATIC:
			return DefDlgCtlColorStaticProc(hDlg, wParam, lParam);
#endif
	}
    return FALSE;
}

////////////////////////////////////////////////////////////////
int CFileProperty::ShowMultiProperty()
{
	//暋悢僼傽僀儖偺僾儘僷僥傿
	PROPSHEETPAGE psp;
	psp.dwSize = sizeof(PROPSHEETPAGE);
	psp.dwFlags = PSP_USETITLE;
	psp.pszTemplate = MAKEINTRESOURCE(IDD_PP_FILE_MULTI);
	psp.pszTitle = IDS_PROP_STANDARD;
	psp.pfnDlgProc = (DLGPROC)PPFileMultiProc;
	psp.hInstance = g_hInst;
	psp.pszIcon = NULL;

	PROPSHEETHEADER psh;
	psh.dwSize = sizeof(PROPSHEETHEADER);
#ifdef __POCKET_PC
	psh.dwFlags = PSH_PROPSHEETPAGE | PSH_MAXIMIZE | PSH_USECALLBACK;
	psh.pfnCallback = PropSheetCallback;
#else
	psh.dwFlags = PSH_PROPSHEETPAGE;
#endif
	psh.nPages = 1;
	psh.nStartPage = 0;
	psh.pszIcon = NULL;
	psh.pszCaption= IDS_PROP_OBJECTS;
	psh.hwndParent = g_MainWnd.m_hWnd;
	psh.hInstance = g_hInst;
	psh.ppsp = &psp;
#ifdef __POCKET_PC
	wcscpy(m_szTitle, IDS_PROP_OBJECTS);
#endif
	return PropertySheet(&psh);
}

////////////////////////////////////////////////////////////////
int CFileProperty::ShowFolderProperty()
{	
	PROPSHEETPAGE psp[2];
	psp[0].dwSize = sizeof(PROPSHEETPAGE);
	psp[0].dwFlags = PSP_USETITLE;
	psp[0].pszTemplate = MAKEINTRESOURCE(IDD_PP_FILE_MAIN);
	psp[0].pszTitle = IDS_PROP_STANDARD;
	psp[0].pfnDlgProc = (DLGPROC)PPFileMainProc;
	psp[0].hInstance = g_hInst;
	psp[0].pszIcon = NULL;

	psp[1].dwSize = sizeof(PROPSHEETPAGE);
	psp[1].dwFlags = PSP_USETITLE;
	psp[1].pszTemplate = MAKEINTRESOURCE(IDD_PP_FILE_MULTI);
	psp[1].pszTitle = IDS_PROP_CONTENTS;
	psp[1].pfnDlgProc = (DLGPROC)PPFileMultiProc;
	psp[1].hInstance = g_hInst;
	psp[1].pszIcon = NULL;

	PROPSHEETHEADER psh;
	TCHAR szTemp[MAX_PATH];
	wsprintf(szTemp, IDS_FMT_PROP_OBJECT, m_lpliinfo[0].szName);
	psh.dwSize = sizeof(PROPSHEETHEADER);
#ifdef __POCKET_PC
	psh.dwFlags = PSH_PROPSHEETPAGE | PSH_MAXIMIZE | PSH_USECALLBACK;
	psh.pfnCallback = PropSheetCallback;
#else
	psh.dwFlags = PSH_PROPSHEETPAGE;
#endif
	psh.nPages = 2;
	psh.nStartPage = 0;
	psh.pszIcon = NULL;
	psh.pszCaption = szTemp;
	psh.hwndParent = g_MainWnd.m_hWnd;
	psh.hInstance = g_hInst;
	psh.ppsp = psp;
#ifdef __POCKET_PC
	wcscpy(m_szTitle, szTemp);
#endif
	return PropertySheet(&psh);
}

////////////////////////////////////////////////////////////////
int CFileProperty::ShowLinkProperty()
{
	wcscpy(m_szOldTarget, _T(""));
	wcscpy(m_szNewTarget, _T(""));

	PROPSHEETPAGE psp[2];
	psp[0].dwSize = sizeof(PROPSHEETPAGE);
	psp[0].dwFlags = PSP_USETITLE;
	psp[0].pszTemplate = MAKEINTRESOURCE(IDD_PP_FILE_MAIN);
	psp[0].pszTitle = IDS_PROP_STANDARD;
	psp[0].pfnDlgProc = (DLGPROC)PPFileMainProc;
	psp[0].hInstance = g_hInst;
	psp[0].pszIcon = NULL;

	psp[1].dwSize = sizeof(PROPSHEETPAGE);
	psp[1].dwFlags = PSP_USETITLE;
	psp[1].pszTemplate = MAKEINTRESOURCE(IDD_PP_FILE_SHORTCUT);
	psp[1].pszTitle = IDS_PROP_SHORTCUT;
	psp[1].pfnDlgProc = (DLGPROC)PPFileShortcutProc;
	psp[1].hInstance = g_hInst;
	psp[1].pszIcon = NULL;

	PROPSHEETHEADER psh;
	TCHAR szTemp[MAX_PATH];
	wsprintf(szTemp, IDS_FMT_PROP_OBJECT, m_lpliinfo[0].szName);
	psh.dwSize = sizeof(PROPSHEETHEADER);
#ifdef __POCKET_PC
	psh.dwFlags = PSH_PROPSHEETPAGE | PSH_MAXIMIZE | PSH_USECALLBACK;
	psh.pfnCallback = PropSheetCallback;
#else
	psh.dwFlags = PSH_PROPSHEETPAGE;
#endif
	psh.nPages = 2;
	psh.nStartPage = 0;
	psh.pszIcon = NULL;
	psh.pszCaption = szTemp;
	psh.hwndParent = g_MainWnd.m_hWnd;
	psh.hInstance = g_hInst;
	psh.ppsp = psp;
#ifdef __POCKET_PC
	wcscpy(m_szTitle, szTemp);
#endif
	return PropertySheet(&psh);
}

////////////////////////////////////////////////////////////////
int CFileProperty::ShowSingleProperty()
{
	PROPSHEETPAGE psp;
	psp.dwSize = sizeof(PROPSHEETPAGE);
	psp.dwFlags = PSP_USETITLE;
	psp.pszTemplate = MAKEINTRESOURCE(IDD_PP_FILE_MAIN);
	psp.pszTitle = IDS_PROP_STANDARD;
	psp.pfnDlgProc = (DLGPROC)PPFileMainProc;
	psp.hInstance = g_hInst;
	psp.pszIcon = NULL;

	PROPSHEETHEADER psh;
	TCHAR szTemp[MAX_PATH];
	wsprintf(szTemp, IDS_FMT_PROP_OBJECT, m_lpliinfo[0].szName);
	psh.dwSize = sizeof(PROPSHEETHEADER);
#ifdef __POCKET_PC
	psh.dwFlags = PSH_PROPSHEETPAGE | PSH_MAXIMIZE | PSH_USECALLBACK;
	psh.pfnCallback = PropSheetCallback;
#else
	psh.dwFlags = PSH_PROPSHEETPAGE;
#endif
	psh.nPages = 1;
	psh.nStartPage = 0;
	psh.pszIcon = NULL;
	psh.pszCaption = szTemp;
	psh.hwndParent = g_MainWnd.m_hWnd;
	psh.hInstance = g_hInst;
	psh.ppsp = &psp;
#ifdef __POCKET_PC
	wcscpy(m_szTitle, szTemp);
#endif
	return PropertySheet(&psh);
}

////////////////////////////////////////////////////////////////
int CFileProperty::ShowFileProperty(LPCTSTR lpszCurrentFolder, LISTITEMINFO* pliinfo, int nCount)
{
	pfp = this;

	int nRet;
	m_lpszCurrentFolder = lpszCurrentFolder;
	m_lpliinfo = pliinfo;
	m_nCount = nCount;
	if (nCount > 1)
		nRet = ShowMultiProperty();
	else
	{
		BOOL bLink = FALSE;

		//僼僅儖僟偺応崌
		if (pliinfo[0].nItem == LIST_ITEM_FOLDER)
			nRet = ShowFolderProperty();
		else if (pliinfo[0].nItem == LIST_ITEM_FILE)
		{
			//儕儞僋偺応崌
			TCHAR szTemp[MAX_PATH];
			wcscpy(szTemp, m_lpliinfo[0].szName);
			LPTSTR lpszExt = wcsrchr(szTemp, _T('.'));
			if (lpszExt != NULL)
			{
//				wcsupr(lpszExt);						//DEL TODA
				if (wcsicmp(lpszExt, _T(".LNK"))==0)	//MOD TODA (wcscmp -> wcsicmp)
				{
					bLink = TRUE;
					nRet = ShowLinkProperty();
				}
				else
					nRet = ShowSingleProperty();
			}
			else
				nRet = ShowSingleProperty();
		}

		if (nRet==IDOK)
		{
			BOOL bRename = TRUE;
			if (!wcslen(m_szNewName))
			{
				MessageBox(g_MainWnd.m_hWnd, IDS_MSG_NONAME, NULL, MB_OK | MB_ICONSTOP);
				bRename = FALSE;
			}

			if (g_MainWnd.m_ListView.m_Settings.bNotShowExt && m_lpliinfo[0].nItem == LIST_ITEM_FILE)
				SetExtFromFileName(m_szNewName, m_lpliinfo[0].szName);

			BOOL bRefresh = FALSE;
			TCHAR szOldPath[MAX_PATH];
			TCHAR szNewPath[MAX_PATH];
			TCHAR szTempPath[MAX_PATH];
			wsprintf(szOldPath, _T("%s\\%s"), m_lpszCurrentFolder, m_lpliinfo[0].szName);
			wsprintf(szNewPath, _T("%s\\%s"), m_lpszCurrentFolder, m_szNewName);
			wcscpy(szTempPath, _T("\\Temp\\Temp.lnk"));
			//儕儞僋傪嶌傝捈偟
			if (wcscmp(m_szOldTarget, m_szNewTarget) != 0 && bLink)
			{
				if (wcslen(m_szNewTarget))
				{
					//僔儑乕僩僇僢僩傪嶌傝捈偟
					DWORD dwAttr = GetFileAttributes(szOldPath);
					SetFileAttributes(szOldPath, FILE_ATTRIBUTE_NORMAL);
					if (DeleteFile(szOldPath))
					{
						bRefresh = TRUE;
						SHCreateShortcut(szOldPath, m_szNewTarget);
						g_MainWnd.m_ListView.m_FileImageListLarge.RefreshIcon(szOldPath);
						g_MainWnd.m_ListView.m_FileImageListSmall.RefreshIcon(szOldPath);
					}
					else
						MessageBox(g_MainWnd.m_hWnd, IDS_MSG_CANNOTCHANGELINK, NULL, MB_OK | MB_ICONSTOP);
					SetFileAttributes(szOldPath, dwAttr);
				}
				else
					MessageBox(g_MainWnd.m_hWnd, IDS_MSG_NOLINKTARGET, NULL, MB_OK | MB_ICONSTOP);
			}

			//懏惈傪曄峏
			if (m_dwOrgAttr != m_dwAttr)
			{
				if (SetFileAttributes(szOldPath, m_dwAttr))
					bRefresh = TRUE;
				else
					MessageBox(g_MainWnd.m_hWnd, IDS_MSG_CANNOTCHANGEATTR, NULL, MB_OK|MB_ICONSTOP);
			}

			if (wcscmp(m_szNewName, m_lpliinfo[0].szName)!=0 && bRename)
			{
				//柤慜偺曄峏
				if (MoveFile(szOldPath, szNewPath))
					bRefresh = TRUE;
				else
					MessageBox(g_MainWnd.m_hWnd, IDS_MSG_CANNOTCHANGENAME, NULL, MB_OK|MB_ICONSTOP);
				
			}
			pfp = NULL;
			return bRefresh;
		}
	}
	pfp = NULL;
	return 0;
}
////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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