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

📄 fileproperty.cpp

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

CFileProperty* pfp = NULL;

////////////////////////////////////////////////////////////////
void CFileProperty::PPFileShortcut_InitDialog(HWND hDlg)
{
#ifdef __POCKET_PC
	SetDlgItemText(hDlg, IDC_TITLE, m_szTitle);
#endif
	SetWindowText(GetDlgItem(hDlg, IDC_SHORTCUT_NAME), m_lpliinfo[0].szName);
	
	TCHAR szPath[MAX_PATH];
	wsprintf(szPath, _T("%s\\%s"), m_lpszCurrentFolder, m_lpliinfo[0].szName);

	SHFILEINFO si;

	//僞乕僎僢僩偺忣曬傪庢摼
	TCHAR szTarget[MAX_PATH];
	if (SHGetShortcutTarget(szPath, szTarget, MAX_PATH))
	{
		SetWindowText(GetDlgItem(hDlg, IDC_EDIT_TARGET_PATH), szTarget);

		wcscpy(m_szOldTarget, szTarget);
		wcscpy(m_szNewTarget, szTarget);

		TCHAR szTemp[MAX_PATH] = {0};
		if (szTarget[0] == _T('\"'))
		{
			LPTSTR lpszTemp = szTarget;
			lpszTemp++;
			LPTSTR lpszMark = wcschr(lpszTemp, _T('"'));
			if (lpszMark)
				wcsncpy(szTemp, lpszTemp, lpszMark-lpszTemp);
			else
				wcsncpy(szTemp, lpszTemp, wcslen(lpszTemp)-1);
		}
		else
		{
			LPTSTR lpszTemp = wcschr(szTarget, _T(' '));
			if (lpszTemp)
				wcsncpy(szTemp, szTarget, lpszTemp-szTarget);
			else
				wcscpy(szTemp, szTarget);
		}

		DWORD dwAttr = GetFileAttributes(szTemp);
		if (dwAttr != 0xFFFFFFFF)
		{
			SHGetFileInfo(szTemp, NULL, &si, sizeof(si), SHGFI_LARGEICON | SHGFI_ICON | SHGFI_TYPENAME);
			SendMessage(GetDlgItem(hDlg, IDC_TARGET_ICON), STM_SETIMAGE, IMAGE_ICON, (LPARAM)si.hIcon);
			SetWindowText(GetDlgItem(hDlg, IDC_TARGET_TYPE), si.szTypeName);
		}
		else
			SetWindowText(GetDlgItem(hDlg, IDC_TARGET_TYPE), IDS_MSG_INVALIDSHORTCUT);
	}
	else
	{
		SetWindowText(GetDlgItem(hDlg, IDC_TARGET_TYPE), IDS_MSG_INVALIDSHORTCUT);
		EnableWindow(GetDlgItem(hDlg, IDC_EDIT_TARGET_PATH), FALSE);
	}
}
////////////////////////////////////////////////////////////////
LRESULT CALLBACK PPFileShortcutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case WM_INITDIALOG:
		{
			pfp->PPFileShortcut_InitDialog(hDlg);
			return TRUE;
		}
		break;
		case WM_COMMAND:
		{
			if (HIWORD(wParam)==EN_CHANGE)
			{
				if (GetDlgItem(hDlg, IDC_EDIT_TARGET_PATH)==(HWND)lParam)
				{
					GetWindowText(GetDlgItem(hDlg, IDC_EDIT_TARGET_PATH), pfp->m_szNewTarget, MAX_PATH);
					return TRUE;
				}
			}
			break;
		}
		break;
#ifdef __POCKET_PC
		case WM_PAINT:
			return DefDlgPaintProc(hDlg, wParam, lParam);
		case WM_CTLCOLORSTATIC:
			return DefDlgCtlColorStaticProc(hDlg, wParam, lParam);
#endif
	}
    return FALSE;
}

////////////////////////////////////////////////////////////////
void CFileProperty::PPFileMain_OnChkReadonly(HWND hDlg)
{
	if (SendMessage(GetDlgItem(hDlg, IDC_CHK_READONLY), BM_GETCHECK, 0, 0))
		m_dwAttr |= FILE_ATTRIBUTE_READONLY;
	else
		m_dwAttr ^= FILE_ATTRIBUTE_READONLY;
}
void CFileProperty::PPFileMain_OnChkHidden(HWND hDlg) 
{
	if (SendMessage(GetDlgItem(hDlg, IDC_CHK_HIDDEN), BM_GETCHECK, 0, 0))
		m_dwAttr |= FILE_ATTRIBUTE_HIDDEN;
	else
		m_dwAttr ^= FILE_ATTRIBUTE_HIDDEN;
}
void CFileProperty::PPFileMain_OnChkArchive(HWND hDlg) 
{
	if (SendMessage(GetDlgItem(hDlg, IDC_CHK_ARCHIVE), BM_GETCHECK, 0, 0))
		m_dwAttr |= FILE_ATTRIBUTE_ARCHIVE;
	else
		m_dwAttr ^= FILE_ATTRIBUTE_ARCHIVE;
}
////////////////////////////////////////////////////////////////
void CFileProperty::PPFileMain_InitDialog(HWND hDlg)
{
#ifdef __POCKET_PC
	SetDlgItemText(hDlg, IDC_TITLE, m_szTitle);
#endif
	TCHAR szTemp[128];
	wcscpy(m_szNewName, m_lpliinfo[0].szName);

	//僼傽僀儖柤
	if (g_MainWnd.m_ListView.m_Settings.bNotShowExt && m_lpliinfo[0].nItem == LIST_ITEM_FILE)
	{
		TCHAR szName[MAX_PATH];
		wcscpy(szName, m_lpliinfo[0].szName);
		SetKickExt(szName);
		SetWindowText(GetDlgItem(hDlg, IDC_EDIT_FILENAME), szName);
	}
	else
		SetWindowText(GetDlgItem(hDlg, IDC_EDIT_FILENAME), m_lpliinfo[0].szName);
	
	//応強
	if (!wcslen(m_lpszCurrentFolder))
		SetWindowText(GetDlgItem(hDlg, IDC_FILE_PATH), GetRootName());
	else
		SetWindowText(GetDlgItem(hDlg, IDC_FILE_PATH), m_lpszCurrentFolder);

	//ADD START TODA (儖乕僩敾掕)
	BOOL bRoot = FALSE;
	if(wcsicmp(m_lpliinfo[0].szName, GetRootName())==0)
		bRoot = TRUE;
	//ADD END

	TCHAR szFilePath[MAX_PATH];
	//ADD START TODA
	if(bRoot)
		wcscpy(szFilePath, _T("\\"));
	else
	//ADD END
		wsprintf(szFilePath, _T("%s\\%s"), m_lpszCurrentFolder, m_lpliinfo[0].szName);
	
	//僼傽僀儖忣曬庢摼
	SHFILEINFO si;
	SHGetFileInfo(szFilePath, NULL, &si, sizeof(si), SHGFI_LARGEICON | SHGFI_ICON | SHGFI_TYPENAME);

	//ADD START TODA (儖乕僩梡傾僀僐儞愝掕)
	if(bRoot)
	{
		//儖乕僩梡傾僀僐儞
		HICON hIcon = LoadIcon(g_hInst, (LPCTSTR)IDI_ROOT_L);
		SendMessage(GetDlgItem(hDlg, IDC_FILE_ICON), STM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon);
		DestroyIcon(hIcon);
	}
	else
	//ADD END
		//傾僀僐儞
		SendMessage(GetDlgItem(hDlg, IDC_FILE_ICON), STM_SETIMAGE, IMAGE_ICON, (LPARAM)si.hIcon);
	

	//僼傽僀儖傪奐偔
	HANDLE hFile = CreateFile(szFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
	
	//僒僀僘
	DWORD dwSize = 0;
	dwSize = GetFileSize(hFile, NULL);
	if (dwSize != 0xFFFFFFFF)
	{
		TCHAR szSize[64];
		TCHAR szKSize[64];
		wsprintf(szSize, _T("%d"), dwSize);
		SetFormatInteger(szSize, 64);
		SetFormatSize(dwSize, szKSize, _T("%s"), _T("%s"));
		if (dwSize < 1024000)
			wsprintf(szTemp, IDS_FMT_KBBYTE, szKSize, szSize);
		else
			wsprintf(szTemp, IDS_FMT_MBBYTE, szKSize, szSize);
		SetWindowText(GetDlgItem(hDlg, IDC_FILE_SIZE), szTemp);
	}
	else
		SetWindowText(GetDlgItem(hDlg, IDC_FILE_SIZE), _T(""));

	//嶌惉擔帪
	TCHAR szTime[64];
	FILETIME ftCreate;
	ftCreate.dwHighDateTime = 0;
	ftCreate.dwLowDateTime = 0;
	SYSTEMTIME st;
	if (GetFileTime(hFile, &ftCreate, NULL, NULL) && ftCreate.dwHighDateTime && ftCreate.dwLowDateTime)
	{
		FileTimeToLocalFileTime(&ftCreate, &ftCreate);
		FileTimeToSystemTime(&ftCreate, &st);
		SetFormatDateTime(&st, szTime, sizeof(szTime));	//MOD TODA
		wsprintf(szTemp, _T("%s"), szTime);
		SetWindowText(GetDlgItem(hDlg, IDC_FILE_CREATE_TIME), szTemp);
	}
	else
		SetWindowText(GetDlgItem(hDlg, IDC_FILE_CREATE_TIME), _T(""));

	//峏怴擔帪
	FILETIME ftUpdate;
	if (GetFileTime(hFile, NULL, NULL, &ftUpdate) && ftUpdate.dwHighDateTime && ftUpdate.dwLowDateTime)
	{
		FileTimeToLocalFileTime(&ftUpdate, &ftUpdate);
		FileTimeToSystemTime(&ftUpdate, &st);
		SetFormatDateTime(&st, szTime, sizeof(szTime));	//MOD TODA
		wsprintf(szTemp, _T("%s"), szTime);
		SetWindowText(GetDlgItem(hDlg, IDC_FILE_WRITE_TIME), szTemp);
	}
	else
		SetWindowText(GetDlgItem(hDlg, IDC_FILE_WRITE_TIME), _T(""));

	CloseHandle(hFile);

	//懏惈
	m_dwAttr = GetFileAttributes(szFilePath);
	if (m_dwAttr != 0xFFFFFFFF && m_lpliinfo[0].nItem == LIST_ITEM_FILE)
	{
		if ((m_dwAttr&FILE_ATTRIBUTE_READONLY)==FILE_ATTRIBUTE_READONLY)
			SendMessage(GetDlgItem(hDlg, IDC_CHK_READONLY), BM_SETCHECK, 1, 0);
		if ((m_dwAttr&FILE_ATTRIBUTE_HIDDEN)==FILE_ATTRIBUTE_HIDDEN)
			SendMessage(GetDlgItem(hDlg, IDC_CHK_HIDDEN), BM_SETCHECK, 1, 0);
		if ((m_dwAttr&FILE_ATTRIBUTE_ARCHIVE)==FILE_ATTRIBUTE_ARCHIVE)
			SendMessage(GetDlgItem(hDlg, IDC_CHK_ARCHIVE), BM_SETCHECK, 1, 0);
		if ((m_dwAttr&FILE_ATTRIBUTE_SYSTEM)==FILE_ATTRIBUTE_SYSTEM)
			SendMessage(GetDlgItem(hDlg, IDC_CHK_SYSTEM), BM_SETCHECK, 2, 0);
	}
	else
	{
		EnableWindow(GetDlgItem(hDlg, IDC_CHK_READONLY), FALSE);
		EnableWindow(GetDlgItem(hDlg, IDC_CHK_HIDDEN), FALSE);
		EnableWindow(GetDlgItem(hDlg, IDC_CHK_ARCHIVE), FALSE);
		EnableWindow(GetDlgItem(hDlg, IDC_CHK_SYSTEM), FALSE);
	}
	m_dwOrgAttr = m_dwAttr;

	//庬椶
	if ((m_dwAttr&FILE_ATTRIBUTE_INROM) == FILE_ATTRIBUTE_INROM)
	{
		wsprintf(szTemp, _T("%s (in ROM)"), si.szTypeName);
		SetWindowText(GetDlgItem(hDlg, IDC_FILE_TYPE), szTemp);
	}
	else
		SetWindowText(GetDlgItem(hDlg, IDC_FILE_TYPE), si.szTypeName);
}

////////////////////////////////////////////////////////////////
LRESULT CALLBACK PPFileMainProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case WM_INITDIALOG:
		{
			pfp->PPFileMain_InitDialog(hDlg);
			return TRUE;
		}
		case WM_COMMAND:
		{
			if (HIWORD(wParam)==BN_CLICKED)
			{
				if (GetDlgItem(hDlg, IDC_CHK_READONLY)==(HWND)lParam)
					pfp->PPFileMain_OnChkReadonly(hDlg);
				else if (GetDlgItem(hDlg, IDC_CHK_HIDDEN)==(HWND)lParam)
					pfp->PPFileMain_OnChkHidden(hDlg);
				else if (GetDlgItem(hDlg, IDC_CHK_ARCHIVE)==(HWND)lParam)
					pfp->PPFileMain_OnChkArchive(hDlg);
			}
			else if (HIWORD(wParam)==EN_CHANGE)
			{
				if (GetDlgItem(hDlg, IDC_EDIT_FILENAME)==(HWND)lParam)
				{
					GetWindowText(GetDlgItem(hDlg, IDC_EDIT_FILENAME), pfp->m_szNewName, MAX_PATH);
					return TRUE;
				}
			}
			break;
		}
#ifdef __POCKET_PC
		case WM_PAINT:
			return DefDlgPaintProc(hDlg, wParam, lParam);
		case WM_CTLCOLORSTATIC:
			return DefDlgCtlColorStaticProc(hDlg, wParam, lParam);
#endif
	}
    return FALSE;
}

////////////////////////////////////////////////////////////////
void CFileProperty::GetFileSizeAndCount(LPCTSTR szPath, DWORD* lpSize, DWORD* lpFileCount)
{
	HANDLE hFile = CreateFile(szPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
	DWORD dwSize = GetFileSize(hFile, NULL);
	if (dwSize != 0xFFFFFFFF)
		*lpSize += dwSize;

	*lpFileCount += 1;
	CloseHandle(hFile);
}

////////////////////////////////////////////////////////////////
void CFileProperty::GetFolderSizeAndCount(LPCTSTR szPath, DWORD* lpSize, DWORD* lpFileCount, DWORD* lpFolderCount)
{
	TCHAR szTemp[MAX_PATH];
	wsprintf(szTemp, _T("%s\\*.*"), szPath);

	WIN32_FIND_DATA finddata;
	HANDLE hFind = FindFirstFile(szTemp, &finddata);
	if (hFind != INVALID_HANDLE_VALUE)
	{
		BOOL bRet = TRUE;
		do
		{
			TCHAR szChildPath[MAX_PATH];
			wsprintf(szChildPath, _T("%s\\%s"), szPath, finddata.cFileName);
			if (finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
				//僼僅儖僟
				GetFolderSizeAndCount(szChildPath, lpSize, lpFileCount, lpFolderCount);
			else
				//僼傽僀儖
				GetFileSizeAndCount(szChildPath, lpSize, lpFileCount);
		}
		while (FindNextFile(hFind, &finddata));
		FindClose(hFind);
	}

⌨️ 快捷键说明

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