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

📄 filesearch.cpp

📁 PocketPC上很好用的文件管理器,而且里面的封装性很好,学windows mobile开发的兄弟,值得一看
💻 CPP
📖 第 1 页 / 共 2 页
字号:
///////////////////////////////////////////////////////////////
//FileSearch.cpp
//僼傽僀儖専嶕愝掕/僼傽僀儖専嶕

///////////////////////////////////////////////////////////////
//INCLUDE
#include "GSFinder.h"
#include "FileSearch.h"
#ifdef __POCKET_PC
#include "FolderDlgPPC.h"
#else
#include "FolderDlg.h"
#endif
///////////////////////////////////////////////////////////////
//僌儘乕僶儖曄悢
CFileSearch		*g_pfsch;

///////////////////////////////////////////////////////////////
//暥帤楍専嶕(儚僀儖僪僇乕僪偺傒懳墳)
BOOL StrStr(LPTSTR lpszData, LPTSTR lpszWord, BOOL bUpr)
{
	LPTSTR lpszDataPos = lpszData;
	LPTSTR lpszWordPos = lpszWord;

	TCHAR szDataTemp[MAX_PATH] = _T("");
	TCHAR szWordTemp[MAX_PATH] = _T("");

	//戝巕暥帤嬫暿柍偟
	if(!bUpr)
	{
		//専嶕尦傪戝暥帤偵曄姺
		wcscpy(szDataTemp, lpszDataPos);
		wcsupr(szDataTemp);
		lpszDataPos = szDataTemp;
#if 0
		wcscpy(szWordTemp, lpszWordPos);
		wcsupr(szWordTemp);
		lpszWordPos = szWordTemp;
#endif
	}

	//暥帤専嶕奐巒(専嶕暥帤偑側偔側傞傑偱)
	while(*lpszWordPos)
	{
		if(*lpszWordPos == _T('*'))
		{
			lpszWordPos++;
		}
		else if(!(*lpszDataPos))
		{
			break;
		}
		else
		{
			if(*lpszWordPos == _T('?'))
			{
				lpszWordPos++;
				lpszDataPos++;
			}
			else
			{
				//専嶕暥帤偺廔抂傪妋擣
				LPTSTR lpszEnd = wcschr(lpszWordPos, _T('*'));
				if(!lpszEnd)
					lpszEnd = wcschr(lpszWordPos, _T('?'));

				//僠僃僢僋暥帤楍嶌惉
				TCHAR szBuf[MAX_PATH];
				int nLen = (lpszEnd?lpszEnd-lpszWordPos:wcslen(lpszWordPos));
				wcsncpy(szBuf, lpszWordPos, nLen);
				szBuf[nLen] = 0x00;
			
				//暥帤楍僠僃僢僋
				LPTSTR lpszTemp = wcsstr(lpszDataPos, szBuf);
				
				//専嶕偵幐攕(亖晄堦抳)
				if(!lpszTemp) return FALSE;

				//僠僃僢僋枹姰椆偺応崌(屻懕偁傝)
				lpszWordPos += nLen;
				lpszDataPos = lpszTemp + nLen;
			}
		}

	} //End of while

	if(*lpszWordPos) return FALSE;
	return TRUE;
}

///////////////////////////////////////////////////////////////
//僼傽僀儖忦審僠僃僢僋
BOOL TextCheck(LPTSTR lpszPath, LPTSTR lpszName, DWORD dwSize, LPTSTR lpszWord, BOOL bUpr)
{
	TCHAR szPath[MAX_PATH];

	//僷僗暥帤楍嶌惉
	if(wcslen(lpszPath))
		wsprintf(szPath, _T("%s\\%s"), lpszPath, lpszName);
	else
		wsprintf(szPath, _T("\\%s"), lpszName);

	//僼傽僀儖僆乕僾儞
	HANDLE hFile = CreateFile(szPath, GENERIC_READ, 0, NULL,
				OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	
	//僆乕僾儞偵幐攕
	if(INVALID_HANDLE_VALUE == hFile) return FALSE;

	//僶僢僼傽嶌惉
	int nWordLen = wcslen(lpszWord)*2+1;
	char *szWordBuf1 = new char[nWordLen];
	char *szWordBuf2 = new char[nWordLen];
	
	//暥帤曄姺(Unicode->S-JIS)
	memset(szWordBuf1, 0x00, nWordLen);
	memset(szWordBuf2, 0x00, nWordLen);
	wcstombs(szWordBuf1, lpszWord, nWordLen);
	wcstombs(szWordBuf2, lpszWord, nWordLen);

	//戝暥帤彫暥帤嬫暿柍偟
	if(!bUpr)
	{
		_strupr(szWordBuf1);
		_strlwr(szWordBuf2);
	}

	//僼傽僀儖偺撉傒崬傒仌僠僃僢僋
	DWORD dwLen=0;
	char *pchk1 = szWordBuf1;
	char *pchk2 = szWordBuf2;
	BOOL bChk=FALSE;
	while(!bChk)
	{
		DWORD dwRead;
		char szDataBuf[4096];
		memset(szDataBuf, 0x00, sizeof(szDataBuf));

		//僼傽僀儖偺撉傒崬傒
		dwRead = 0;
		if(!ReadFile(hFile, &szDataBuf, sizeof(szDataBuf), &dwRead, 0) || !dwRead)
			break;

		//僶僢僼傽撪梕傪1僶僀僩偯偮僠僃僢僋
		for(DWORD i=0; i<dwRead && !bChk; i++)
		{
			//愭摢1僶僀僩偺傒斾妑
			if(!bUpr)
			{
				if((*pchk1) != szDataBuf[i] &&
				   (*pchk2) != szDataBuf[i]) continue;
			}
			else
				if((*pchk1) != szDataBuf[i]) continue;
			
			//僠僃僢僋偡傞儗儞僌僗嶼弌
			DWORD nLen = strlen(pchk1);
			if(nLen > (dwRead-i))
				nLen = dwRead-i;
				
			//戝彫暥帤嬫暿柍偟
			if(!bUpr)
			{
				//暥帤楍僠僃僢僋
				for(DWORD j=0; j<nLen; j++)
				{
					bChk = TRUE;
					//戝彫暥帤偄偯傟偐偑堦抳偟側偄応崌
					if((*pchk1) != szDataBuf[i+j] &&
					   (*pchk2) != szDataBuf[i+j]) {
						pchk1 = szWordBuf1;
						pchk2 = szWordBuf2;
						bChk = FALSE;
						break;
					}
					pchk1++;
					pchk2++;

				} //End of for
			}
			//戝彫暥帤嬫暿桳傝
			else
			{
				//暥帤楍僠僃僢僋
				if(memcmp(pchk1, &szDataBuf[i], nLen) == 0)
				{
					pchk1 += nLen;
					bChk = TRUE;
					break;
				} else {
					pchk1 = szWordBuf1;
				}
			}

		} //End of for

		//僇僂儞僞峏怴
		dwLen += dwRead;
	
	} //End of for

	//僶僢僼傽嶍彍
	delete[] szWordBuf1;
	delete[] szWordBuf2;

	//僼傽僀儖僋儘乕僘
	CloseHandle(hFile);
	return bChk;
}

///////////////////////////////////////////////////////////////
//僂傿儞僪僂僗僞僀儖愝掕
LONG SetWindowStyle(HWND hWnd, LONG style, BOOL Add) {
	LONG				src;
	LONG				n;
	src = GetWindowLong(hWnd, GWL_STYLE);
	if(Add) {
		n = src | style;
	} else {
		n = src & ~style;
	}
	SetWindowLong(hWnd, GWL_STYLE, n);
	return n;
}

///////////////////////////////////////////////////////////////
//僂傿儞僪僂僾儘僔乕僕儍
LRESULT CALLBACK FileSearchProc(
		HWND hDlg,
		UINT message,
		WPARAM wParam,
		LPARAM lParam)
{
	switch (message)
	{
		case WM_INITDIALOG:
		{
			g_pfsch->m_hWnd = hDlg;
			g_pfsch->OnInit();
			break;
		}
		case WM_COMMAND:
		{
			int wmId    = LOWORD(wParam);
			int wmEvent = HIWORD(wParam);
			switch(wmId)
			{
				//擔晅僠僃僢僋儃僞儞墴壓
				case IDC_CHK_DATE:
					g_pfsch->OnChkDateChange();
					break;
				//僒僀僘僠僃僢僋儃僞儞墴壓
				case IDC_CHK_SIZE:
					g_pfsch->OnChkSizeChange();
					break;
				//嶲徠儃僞儞墴壓
				case IDC_BTN_BROWSE:
					g_pfsch->OnBrowse();
					break;
				//OK儃僞儞墴壓
				case IDOK:
					ShowWindow(hDlg, SW_HIDE);
					g_pfsch->OnOK();
					break;
				//擔晅庬暿曄峏
				case IDC_COMB_DATE:
					g_pfsch->OnCombDateChange();
					break;
				//僒僀僘庬暿曄峏
				case IDC_COMB_SIZE:
					g_pfsch->OnCombSizeChange();
					break;
				//僉儍儞僙儖儃僞儞墴壓
				case IDCANCEL:
				{
					EndDialog(hDlg, (INT)FALSE);
					return TRUE;
				}
			}
			break;
		}
		case WM_DLGCLOSE:
		{
#ifdef __POCKET_PC
				//SIP僋儘乕僘
				SipShowIM(SIPF_OFF);
#endif
			int rc = g_pfsch->OnFileSerch();
			EndDialog(hDlg, rc);
			break;
		}
#ifdef __POCKET_PC
		case WM_PAINT:
			return DefDlgPaintProc(hDlg, wParam, lParam);
		case WM_CTLCOLORSTATIC:
			return DefDlgCtlColorStaticProc(hDlg, wParam, lParam);
#endif
	}
	return FALSE;
}

///////////////////////////////////////////////////////////////
//僐儞僗僩儔僋僞
CFileSearch::CFileSearch(HWND hWnd, HINSTANCE hInst, LPTSTR lpszPath)
{
	g_pfsch = this;

	//僷儔儊乕僞偺曐懚
	m_hparWnd = hWnd;
	m_hInst = hInst;
	if(lpszPath)
		wcscpy(m_szCurrent, lpszPath);
	else
		m_szCurrent[0]=0x00;

	//僐儞僩儘乕儖偺弶婜壔
	InitCommonControls();

	//擔晅巜掕僐儞僩儘乕儖偺弶婜壔
	INITCOMMONCONTROLSEX ctl;
	ctl.dwSize = sizeof(ctl);
	ctl.dwICC = ICC_DATE_CLASSES;
	InitCommonControlsEx(&ctl);

	//儊儞僶曄悢偺弶婜壔
	m_ListView = &g_MainWnd.m_ListView;
}

///////////////////////////////////////////////////////////////
//僨僗僩儔僋僞
CFileSearch::~CFileSearch()
{
}

///////////////////////////////////////////////////////////////
//僂傿儞僪僂僆乕僾儞
int CFileSearch::Open()
{
#ifdef __POCKET_PC
	//SIP僆乕僾儞
	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;
	}
#endif

	//僂傿儞僪僂嶌惉
	int rtn =  DialogBox(m_hInst, (LPCTSTR)IDD_SEARCH_DLG,
				m_hparWnd, (DLGPROC)FileSearchProc);

#ifdef __POCKET_PC
	//SIP僋儘乕僘
	if (bSetSip)
		SipShowIM(SIPF_OFF);
#endif

	return rtn;
}

///////////////////////////////////////////////////////////////
void CFileSearch::SetEditPath(LPTSTR lpszPath)
{
	//専嶕僷僗偺応崌丄儖乕僩傪愝掕偡傞
	if((!wcslen(lpszPath)) || (wcscmp(SEARCH_FOLDER_NAME, lpszPath)==0))
	{
		SetWindowText(GetDlgItem(m_hWnd, IDC_EDIT_PATH), GetRootName());
	}
	else
	{
		wcscpy(m_szCurrent, lpszPath);
		SetWindowText(GetDlgItem(m_hWnd, IDC_EDIT_PATH), lpszPath);
	}
}

///////////////////////////////////////////////////////////////
void CFileSearch::SetDateList()
{
	HWND hCB = GetDlgItem(m_hWnd, IDC_COMB_DATE);
	if(hCB)
	{
		SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)IDS_LIST_DATETYPE_CMP);
		SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)IDS_LIST_DATETYPE_AREA);
		SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)IDS_LIST_DATETYPE_BEF);
		SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)IDS_LIST_DATETYPE_AFT);
	}
}

///////////////////////////////////////////////////////////////
void CFileSearch::SetSizeList()
{
	HWND hCB = GetDlgItem(m_hWnd, IDC_COMB_SIZE);
	if(hCB)
	{
		SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)IDS_LIST_SIZETYPE_CMP);
		SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)IDS_LIST_SIZETYPE_LOW);
		SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)IDS_LIST_SIZETYPE_HIGH);
	}
}

///////////////////////////////////////////////////////////////
//僼傽僀儖忦審僠僃僢僋
BOOL CFileSearch::FileCheck(WIN32_FIND_DATA *lpFind, SEARCHINFO *lpSearch, LPTSTR lpszPath)
{
	//僼傽僀儖柤僠僃僢僋
	if(wcslen(lpSearch->szName))
	{
		if(!StrStr(lpFind->cFileName, lpSearch->szName, FALSE))
		{
			return FALSE;
		}
	}

	//僨傿儗僋僩儕偺応崌偼偙偙傑偱
	if (lpFind->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

⌨️ 快捷键说明

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