📄 filesearch.cpp
字号:
{
//僼傽僀儖柤埲奜偺忦審偑愝掕偝傟偰偄側偄応崌偺傒
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 + -