• R/O
  • SSH
  • HTTPS

gsfinder-w03:


File Info

Rev. 3
大小 19,448 字节
时间 2008-05-24 01:47:32
作者 goriponsoft
Log Message

・アクションボタン長押しでコンテキストメニューが使えるように修正
・画面の縦横切り替え後にステータスバー/アドレスバーのサイズがおかしくなる点を修正
・文字列の入力の際にSIPが開かないように修正
・ツールバーに「上へ」ボタンを追加
・メニューのショートカットキーを数字キーに切り替える機能を追加
・「ネットワーク接続の割り当て」「ネットワーク接続の切断」「赤外線受信」が動作しなくなっていたのを修正
・「お気に入りの整理」を繰り返すとメニューが壊れていたのを修正
・右メニューに「戻る」と「進む」を追加
・「送る」のフォルダ選択で下層フォルダを自動展開しないよう修正
・".."が選択された状態でフォーカス無しと同じコンテキストメニューが出るように修正
・メニューバーの文字列の解像度が低かったのを修正
・高DPIのハードウェアに対応しハイレゾモードを搭載
・「ユーザーパス」で登録したパスの表示が崩れていたのを修正
・縦画面と横画面それぞれにフォルダ表示の分割方向とサイズの設定を保管するように変更
・WindowsMobile非対応部分を対応するように修正
・ユーザーパスの登録で末尾に'\'を付けるとメニューで正常に表示されなくなっていたのを修正
・「送る」のフォルダ選択で右キー入力により下層フォルダの展開が出来機能を追加
・「送る」メニューにメールソフトで送信する「メール受信者」を追加
・「プログラムの選択」「ユーザーパス編集」ダイアログの表示を画面に合わせて調整するよう修正
・フォルダ表示へのタップで稀にコンテキストメニューが開いてしまっていたのを修正
・フォルダ表示のカーソルが上下端でループする機能を追加
・フォルダ表示/ファイル表示上のマイポケットPCでクリアキーを押すと相互にフォーカスが移動する機能を追加
・右ソフトキーメニューにフォーカス移動を行う「フォルダ表示へ移動」を追加
・左右のメニューを入れ替える機能を追加
・「編集」に「範囲選択」(SHIFTキーONと同等)と「複数選択」(CTRLキーONと同等)を追加
・「オプション」の「ファイルの種類」タブでリストをタップしないと削除/編集のボタンが使えなかったのを修正
・「フォルダ表示」がOFFの場合には「左右に並べる」が選べないように修正
・「オプション」の「ファイルの種類」タブの表示を画面に合わせて調整するよう修正
・「オプション」の「GSFinderについて」タブにバージョン番号の表示を追加

Content

///////////////////////////////////////////////////////////////
//FileSearch.cpp
//ファイル検索設定/ファイル検索

///////////////////////////////////////////////////////////////
//INCLUDE
#include "GSFinder.h"
#include "FileSearch.h"
#include "FolderDlgPPC.h"
///////////////////////////////////////////////////////////////
//グローバル変数
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;
		//wcscpy(szWordTemp, lpszWordPos);
		//wcsupr(szWordTemp);
		//lpszWordPos = szWordTemp;
	}

	//文字検索開始(検索文字がなくなるまで)
	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:
		{
			//SIPクローズ
			SipShowIM(SIPF_OFF);
			int rc = g_pfsch->OnFileSerch();
			EndDialog(hDlg, rc);
			break;
		}
		case WM_PAINT:
			return DefDlgPaintProc(hDlg, wParam, lParam);
		case WM_CTLCOLORSTATIC:
			return DefDlgCtlColorStaticProc(hDlg, wParam, lParam);
	}
	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()
{
//DEL START GORIPON
//	//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;
//	}
//DEL END
	//ウィンドウ作成
	int rtn =  DialogBox(m_hInst, (LPCTSTR)IDD_SEARCH_DLG,
				m_hparWnd, (DLGPROC)FileSearchProc);
	//SIPクローズ
	//if (bSetSip)	//DEL GORIPON
		SipShowIM(SIPF_OFF);
	return rtn;
}

///////////////////////////////////////////////////////////////
void CFileSearch::SetEditPath(LPTSTR lpszPath)
{
	//検索パスの場合、ルートを設定する
	if((!wcslen(lpszPath)) || (wcscmp(IDS_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)
	{
		//ファイル名以外の条件が設定されていない場合のみ
		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()
{
	SHINITDLGINFO shidi;
	shidi.dwMask = SHIDIM_FLAGS;
	shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIZEDLGFULLSCREEN;
	shidi.hDlg = m_hWnd;
	SHInitDialog(&shidi);

	//ウィンドウタイトル
	SetWindowText(m_hWnd, IDS_TITLE_FILESEARCHDLG);

	//ウィンドウ初期化
//ADD START GORIPON
	//メニューバーを追加
	SHMENUBARINFO mbi;
	memset(&mbi, 0, sizeof(SHMENUBARINFO));
	mbi.cbSize = sizeof(SHMENUBARINFO);
	mbi.hwndParent = m_hWnd;
	mbi.nToolBarId = IDR_FILESEARCH;
	mbi.hInstRes = g_hInst;
	mbi.nBmpId = 0;
	mbi.cBmpImages = 0;
	SHCreateMenuBar(&mbi);
//ADD END

	//検索場所
	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()
{
}

///////////////////////////////////////////////////////////////
//OKボタン押下
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;
}
Show on old repository browser