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

📄 filesearch.cpp

📁 PocketPC上很好用的文件管理器,而且里面的封装性很好,学windows mobile开发的兄弟,值得一看
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	{
		//僼傽僀儖柤埲奜偺忦審偑愝掕偝傟偰偄側偄応崌偺傒
		if(wcslen(lpSearch->szName) &&
		   lpSearch->nDateType == DATE_TYPE_NON &&
		   lpSearch->nSizeType == SIZE_TYPE_NON &&
		   !(wcslen(lpSearch->szText)))
			return TRUE;
		else
			return FALSE;
	}

	//擔晅僠僃僢僋
	if(lpSearch->nDateType != DATE_TYPE_NON)
	{	
		//暥帤楍曄姺
		TCHAR szDate[8+1];
		SYSTEMTIME sys;
		FILETIME ft;
		
		ft = lpFind->ftLastWriteTime;
		FileTimeToLocalFileTime(&ft, &ft);
		FileTimeToSystemTime(&ft, &sys);
		wsprintf(szDate, _T("%04d%02d%02d"), sys.wYear, sys.wMonth, sys.wDay);

		switch(lpSearch->nDateType)
		{
		//堦抳
		case DATE_TYPE_CMP:
			if(wcscmp(lpSearch->szFromDate, szDate)!=0)
				return FALSE;
			break;
		//堦抳(斖埻)
		case DATE_TYPE_AREA:
			if(wcscmp(lpSearch->szFromDate, szDate)>0)
				return FALSE;
			if(wcscmp(lpSearch->szToDate, szDate)<0)
				return FALSE;
			break;
		//埲慜
		case DATE_TYPE_BEF:
			if(wcscmp(lpSearch->szFromDate, szDate)<0)
				return FALSE;
			break;
		//埲崀
		case DATE_TYPE_AFT:
			if(wcscmp(lpSearch->szFromDate, szDate)>0)
				return FALSE;
			break;
		}
	}

	//僒僀僘僠僃僢僋
	if(lpSearch->nSizeType != SIZE_TYPE_NON)
	{
		double fSize;
		fSize = (double)(lpFind->nFileSizeLow/1024);

		switch(lpSearch->nSizeType)
		{
		//堦抳
		case SIZE_TYPE_CMP:
			if(lpSearch->dwSize != fSize)
				return FALSE;
			break;
		//壓尷
		case SIZE_TYPE_LOW:
			if(lpSearch->dwSize > fSize)
				return FALSE;
			break;
		//忋尷
		case SIZE_TYPE_HIGH:
			if(lpSearch->dwSize < fSize)
				return FALSE;
			break;
		}
	}

	//僥僉僗僩僠僃僢僋
	if(wcslen(lpSearch->szText))
	{
		if(!TextCheck(lpszPath, lpFind->cFileName, lpFind->nFileSizeLow,
				lpSearch->szText, lpSearch->bTextUpr))
			return FALSE;
	}
		
	return TRUE;
}

///////////////////////////////////////////////////////////////
//僼傽僀儖専嶕
void CFileSearch::FileSearch(LPTSTR lpszPath)
{
	TCHAR szPath[MAX_PATH];
	LPTSTR lpszCurrent;

	//僇儗儞僩僷僗愝掕
	if(!lpszPath)
	{
		lpszCurrent = m_lpSearch.szCurrent;
	}
	else
		lpszCurrent = lpszPath;

	//専嶕僷僗嶌惉
	if(wcslen(lpszCurrent))
		wsprintf(szPath, _T("%s\\*.*"), lpszCurrent);
	else
		wsprintf(szPath, _T("\\*.*"));

	//僼傽僀儖偺撉傒崬傒
	WIN32_FIND_DATA finddata;
	HANDLE hFind = FindFirstFile(szPath, &finddata);
	if(hFind != INVALID_HANDLE_VALUE)
	{
		do
		{
			//忦審僠僃僢僋偑OK偺応崌
			if(FileCheck(&finddata, &m_lpSearch, lpszCurrent))
			{
				//傾僀僥儉傪儕僗僩偵搊榐
				if(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
				{
					//専嶕儕僗僩捛壛
					m_ListView->m_lpSearchData = 
						m_ListView->AddSearch(
							m_ListView->m_lpSearchData,
							lpszCurrent,
							finddata.cFileName,
							finddata.ftCreationTime,
							0,
							finddata.dwFileAttributes);
				}
				else
				{
					//専嶕儕僗僩捛壛
					m_ListView->m_lpSearchData = 
						m_ListView->AddSearch(
							m_ListView->m_lpSearchData,
							lpszCurrent,
							finddata.cFileName,
							finddata.ftLastWriteTime,
							finddata.nFileSizeLow,
							finddata.dwFileAttributes);
				}
			}

			//僒僽僨傿儗僋僩儕専嶕妿偮僨傿儗僋僩儕偺応崌
			if(m_lpSearch.bSubFolder &&
			   finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				TCHAR szTemp[MAX_PATH];
				if(wcslen(lpszCurrent))
					wsprintf(szTemp, _T("%s\\%s"), lpszCurrent, finddata.cFileName);
				else
					wsprintf(szTemp, _T("\\%s"), finddata.cFileName);

				//嵞婲屇傃弌偟
				FileSearch(szTemp);
			}

//			Sleep(0);
		}
		while(FindNextFile(hFind, &finddata));
		FindClose(hFind);
	}
}

///////////////////////////////////////////////////////////////
//僂傿儞僪僂弶婜壔
void CFileSearch::OnInit()
{
#ifdef __POCKET_PC
	SHINITDLGINFO shidi;
	shidi.dwMask = SHIDIM_FLAGS;
	shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIZEDLGFULLSCREEN;
	shidi.hDlg = m_hWnd;
	SHInitDialog(&shidi);
#endif
	//僂傿儞僪僂僞僀僩儖
	SetWindowText(m_hWnd, IDS_TITLE_FILESEARCHDLG);

	//僂傿儞僪僂弶婜壔
	//専嶕応強
	SetEditPath(m_szCurrent);
	
	//擔晅儕僗僩愝掕
	SetDateList();

	//擔晅晹昳昞帵/旕昞帵張棟
	OnChkDateChange();

	//僒僀僘儕僗僩愝掕
	SetSizeList();

	//僒僀僘晹昳昞帵/旕昞帵張棟
	OnChkSizeChange();

	//僒僀僘弶婜抣愝掕
	SetWindowText(GetDlgItem(m_hWnd, IDC_EDIT_SIZE), _T("0"));

	//戝彫暥帤嬫暿傪ON
	SendMessage(GetDlgItem(m_hWnd, IDC_CHK_UPR), BM_SETCHECK, 1, 0);
	
	//僒僽僼僅儖僟専嶕傪ON
	SendMessage(GetDlgItem(m_hWnd, IDC_CHK_SUBFOLDER), BM_SETCHECK, 1, 0);

	//僼僅乕僇僗愝掕
	SetFocus(GetDlgItem(m_hWnd, IDC_EDIT_NAME));
}

///////////////////////////////////////////////////////////////
//嶲徠儃僞儞墴壓
void CFileSearch::OnBrowse()
{
	TCHAR szFolderTo[MAX_PATH] = _T("");
	
	//専嶕応強庢摼
	GetWindowText(GetDlgItem(m_hWnd, IDC_EDIT_PATH),
							szFolderTo, sizeof(szFolderTo));
	
	//僨傿儗僋僩儕桳柍妋擣
	DWORD dwAttr = GetFileAttributes(szFolderTo);
	if(!(FILE_ATTRIBUTE_DIRECTORY == (dwAttr & FILE_ATTRIBUTE_DIRECTORY) && dwAttr != 0xFFFFFFFF))
	{
		//柍岠偺応崌偼嬻敀偲偡傞
		szFolderTo[0] = 0x00;
	}
	
	//僼僅儖僟巜掕僟僀傾儘僌僆乕僾儞
	CFolderDlg fd;
	if (fd.ShowFolderDlg(IDS_TITLE_FILESEARCH,
					szFolderTo, sizeof(szFolderTo))==IDOK)
	{
		SetEditPath(szFolderTo);
	}
}

///////////////////////////////////////////////////////////////
//擔晅僠僃僢僋儃僢僋僗墴壓
void CFileSearch::OnChkDateChange()
{
	BOOL bChk = IsDlgButtonChecked(m_hWnd, IDC_CHK_DATE);

	for(int i=0; i<3; i++)
	{
		HWND hItemWnd;
		switch(i)
		{
			//擔晅僠僃僢僋庬暿
			case 0:
				hItemWnd = GetDlgItem(m_hWnd, IDC_COMB_DATE);
				break;
			//奐巒擔晅
			case 1:
				hItemWnd = GetDlgItem(m_hWnd, IDC_DATE_FROM);
				break;
			//廔椆擔晅
			case 2:
			{	
				//擔晅庬暿張棟
				OnCombDateChange();

				hItemWnd = GetDlgItem(m_hWnd, IDC_DATE_TO);
				break;
			}
		}
		EnableWindow(hItemWnd, bChk);
	} //End of for
}

///////////////////////////////////////////////////////////////
//僒僀僘僠僃僢僋儃僢僋僗墴壓
void CFileSearch::OnChkSizeChange()
{
	BOOL bChk = IsDlgButtonChecked(m_hWnd, IDC_CHK_SIZE);

	for(int i=0; i<3; i++)
	{
		HWND hItemWnd;
		switch(i)
		{
			//擔晅僠僃僢僋庬暿
			case 0:
				hItemWnd = GetDlgItem(m_hWnd, IDC_EDIT_SIZE);
				break;
			//奐巒擔晅
			case 1:
				hItemWnd = GetDlgItem(m_hWnd, IDC_COMB_SIZE);
				break;
		}
		EnableWindow(hItemWnd, bChk);
	} //End of for
}

///////////////////////////////////////////////////////////////
//擔晅庬暿曄峏
void CFileSearch::OnCombDateChange()
{
	HWND hItemWnd = GetDlgItem(m_hWnd, IDC_DATE_TO);

	//擔晅庬暿庢摼
	int nIndex = SendMessage(GetDlgItem(m_hWnd, IDC_COMB_DATE),CB_GETCURSEL, 0, 0)+1;
	
	//斖埻巜掕偺応崌
	if(nIndex != DATE_TYPE_AREA)
		//廔椆擔晅傪旕昞帵
		ShowWindow(hItemWnd, SW_HIDE);
	else
		//廔椆擔晅傪昞帵
		ShowWindow(hItemWnd, SW_SHOW);
}

///////////////////////////////////////////////////////////////
//僒僀僘庬暿曄峏
void CFileSearch::OnCombSizeChange()
{
}

///////////////////////////////////////////////////////////////
//俷俲儃僞儞墴壓
void CFileSearch::OnOK()
{
	//僂傿儞僪僂旕昞帵
	ShowWindow(m_hWnd, SW_HIDE);

	//廔椆(亖専嶕奐巒)儊僢僙乕僕憲怣
	SendMessage(m_hWnd, WM_DLGCLOSE, 0, 0);
}

///////////////////////////////////////////////////////////////
//専嶕奐巒
int CFileSearch::OnFileSerch()
{
	//僇乕僜儖傪張棟拞偵偡傞
	HCURSOR hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));

	//専嶕儕僗僩嶍彍
	if(m_ListView->m_lpSearchData)
	{
		m_ListView->DeleteSearch(m_ListView->m_lpSearchData);
		m_ListView->m_lpSearchData = NULL;
	}
	
	memset(&m_lpSearch, 0x00, sizeof(m_lpSearch));

	//専嶕僼傽僀儖柤
	GetWindowText(GetDlgItem(m_hWnd, IDC_EDIT_NAME),
					m_lpSearch.szName, sizeof(m_lpSearch.szName));

	//戝暥帤/彫暥帤曄姺
	wcsupr(m_lpSearch.szName);

	//専嶕僥僉僗僩
	GetWindowText(GetDlgItem(m_hWnd, IDC_EDIT_TEXT),
					m_lpSearch.szText, sizeof(m_lpSearch.szText));

	//戝彫暥帤嬫暿
	m_lpSearch.bTextUpr = IsDlgButtonChecked(m_hWnd, IDC_CHK_UPR);

	//専嶕応強
	GetWindowText(GetDlgItem(m_hWnd, IDC_EDIT_PATH),
					m_lpSearch.szCurrent, sizeof(m_lpSearch.szCurrent));

	//僨傿儗僋僩儕桳柍妋擣
	DWORD dwAttr = GetFileAttributes(m_lpSearch.szCurrent);
	if(!(FILE_ATTRIBUTE_DIRECTORY == (dwAttr & FILE_ATTRIBUTE_DIRECTORY) && dwAttr != 0xFFFFFFFF))
	{
		//側偄応崌偼嬻敀(儖乕僩)
		m_lpSearch.szCurrent[0] = 0x00;
	}
	if(!wcscmp(m_lpSearch.szCurrent, _T("\\")))
		m_lpSearch.szCurrent[0] = 0x00;
	
	//僒僽僼僅儖僟傕専嶕
	m_lpSearch.bSubFolder = IsDlgButtonChecked(m_hWnd, IDC_CHK_SUBFOLDER);

	//擔晅
	m_lpSearch.nDateType = DATE_TYPE_NON;
	if(IsDlgButtonChecked(m_hWnd, IDC_CHK_DATE))
	{
		SYSTEMTIME sys;
		//擔晅僠僃僢僋庬暿
		m_lpSearch.nDateType = 
			SendMessage(GetDlgItem(m_hWnd, IDC_COMB_DATE), CB_GETCURSEL, 0, 0)+1;
		if(!m_lpSearch.nDateType) m_lpSearch.nDateType = DATE_TYPE_CMP;

		//奐巒擔晅
		DateTime_GetSystemtime(GetDlgItem(m_hWnd, IDC_DATE_FROM), &sys);
		wsprintf(m_lpSearch.szFromDate, _T("%04d%02d%02d"), sys.wYear, sys.wMonth, sys.wDay);

		//廔椆擔晅
		DateTime_GetSystemtime(GetDlgItem(m_hWnd, IDC_DATE_TO), &sys);
		wsprintf(m_lpSearch.szToDate, _T("%04d%02d%02d"), sys.wYear, sys.wMonth, sys.wDay);
	}
	
	//僒僀僘
	m_lpSearch.nSizeType = SIZE_TYPE_NON;
	if(IsDlgButtonChecked(m_hWnd, IDC_CHK_SIZE))
	{
		//僒僀僘僠僃僢僋庬暿
		m_lpSearch.nSizeType = 
			SendMessage(GetDlgItem(m_hWnd, IDC_COMB_SIZE), CB_GETCURSEL, 0, 0)+1;
		if(!m_lpSearch.nSizeType) m_lpSearch.nSizeType = SIZE_TYPE_CMP;
		
		//僒僀僘
		TCHAR szBuf[16];
		GetWindowText(GetDlgItem(m_hWnd, IDC_EDIT_SIZE), szBuf, sizeof(szBuf));
		m_lpSearch.dwSize = _wtoi(szBuf);
	}

	//専嶕幚峴
	FileSearch();

	//僇乕僜儖傪尦偵栠偡
	SetCursor(hCursor);

	return (INT)TRUE;
}

⌨️ 快捷键说明

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