/*! @brief フォルダ指定EditBoxのコールバック関数 @date 2007.02.09 bosagami 新規作成 @date 2007.09.02 genta ディレクトリチェックを強化 */ LRESULT CALLBACK OnFolderProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam) { if(msg == WM_DROPFILES) do { // From Here 2007.09.02 genta SFilePath sPath; if( DragQueryFile((HDROP)wparam, 0, NULL, 0 ) > _countof2(sPath) - 1 ){ // skip if the length of the path exceeds buffer capacity break; } DragQueryFile((HDROP)wparam, 0, sPath, _countof2(sPath) - 1); //ファイルパスの解決 CSakuraEnvironment::ResolvePath(sPath); // ファイルがドロップされた場合はフォルダを切り出す // フォルダの場合は最後が失われるのでsplitしてはいけない. if( IsFileExists( sPath, true )){ // 第2引数がtrueだとディレクトリは対象外 SFilePath szWork; SplitPath_FolderAndFile( sPath, szWork, NULL ); _tcscpy( sPath, szWork ); } SetGrepFolder(hwnd, sPath); } while(0); // 1回しか通らない. breakでここまで飛ぶ return CallWindowProc(g_pOnFolderProc,hwnd,msg,wparam,lparam); }
/* メッセージ処理 */ INT_PTR CPropBackup::DispatchEvent( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { WORD wNotifyCode; WORD wID; NMHDR* pNMHDR; NM_UPDOWN* pMNUD; int idCtrl; // int nVal; int nVal; //Sept.21, 2000 JEPRO スピン要素を加えたので復活させた // int nDummy; // int nCharChars; switch( uMsg ){ case WM_INITDIALOG: /* ダイアログデータの設定 Backup */ SetData( hwndDlg ); // Modified by KEITA for WIN64 2003.9.6 ::SetWindowLongPtr( hwndDlg, DWLP_USER, lParam ); /* ユーザーがエディット コントロールに入力できるテキストの長さを制限する */ // Oct. 5, 2002 genta バックアップフォルダ名の入力サイズを指定 // Oct. 8, 2002 genta 最後に付加される\の領域を残すためバッファサイズ-1しか入力させない EditCtl_LimitText( ::GetDlgItem( hwndDlg, IDC_EDIT_BACKUPFOLDER ), _countof2(m_Common.m_sBackup.m_szBackUpFolder) - 1 - 1 ); // 20051107 aroka EditCtl_LimitText( ::GetDlgItem( hwndDlg, IDC_EDIT_BACKUPFILE ), _countof2(m_Common.m_sBackup.m_szBackUpPathAdvanced) - 1 - 1 ); return TRUE; case WM_NOTIFY: idCtrl = (int)wParam; pNMHDR = (NMHDR*)lParam; pMNUD = (NM_UPDOWN*)lParam; switch( idCtrl ){ default: switch( pNMHDR->code ){ case PSN_HELP: OnHelp( hwndDlg, IDD_PROP_BACKUP ); return TRUE; case PSN_KILLACTIVE: /* ダイアログデータの取得 Backup */ GetData( hwndDlg ); return TRUE; //@@@ 2002.01.03 YAZAKI 最後に表示していたシートを正しく覚えていないバグ修正 case PSN_SETACTIVE: m_nPageNum = ID_PROPCOM_PAGENUM_BACKUP; return TRUE; } break; case IDC_SPIN_BACKUP_GENS: /* バックアップファイルの世代数 */ nVal = ::GetDlgItemInt( hwndDlg, IDC_EDIT_BACKUP_3, NULL, FALSE ); if( pMNUD->iDelta < 0 ){ ++nVal; }else if( pMNUD->iDelta > 0 ){ --nVal; } if( nVal < 1 ){ nVal = 1; } if( nVal > 99 ){ nVal = 99; } ::SetDlgItemInt( hwndDlg, IDC_EDIT_BACKUP_3, nVal, FALSE ); return TRUE; } //**** To Here Sept. 21, 2000 JEPRO ダイアログ要素にスピンを入れるので以下のWM_NOTIFYをコメントアウトにし下に修正を置いた break; case WM_COMMAND: wNotifyCode = HIWORD(wParam); /* 通知コード */ wID = LOWORD(wParam); /* 項目ID、 コントロールID、 またはアクセラレータID */ switch( wNotifyCode ){ /* ボタン/チェックボックスがクリックされた */ case BN_CLICKED: switch( wID ){ case IDC_RADIO_BACKUP_TYPE1: // Aug. 16, 2000 genta // バックアップ方式追加 case IDC_RADIO_BACKUP_TYPE3: case IDC_CHECK_BACKUP: case IDC_CHECK_BACKUPFOLDER: // Aug. 21, 2000 genta case IDC_CHECK_AUTOSAVE: // Jun. 5, 2004 genta IDC_RADIO_BACKUP_TYPE2を廃止して, // IDC_RADIO_BACKUP_DATETYPE1, IDC_RADIO_BACKUP_DATETYPE2を同列に持ってきた case IDC_RADIO_BACKUP_DATETYPE1: case IDC_RADIO_BACKUP_DATETYPE2: // 20051107 aroka case IDC_CHECK_BACKUP_ADVANCED: GetData( hwndDlg ); UpdateBackupFile( hwndDlg ); EnableBackupInput(hwndDlg); return TRUE; case IDC_BUTTON_BACKUP_FOLDER_REF: /* フォルダ参照 */ { /* バックアップを作成するフォルダ */ TCHAR szFolder[_MAX_PATH]; ::DlgItem_GetText( hwndDlg, IDC_EDIT_BACKUPFOLDER, szFolder, _countof( szFolder )); if( SelectDir( hwndDlg, LS(STR_PROPCOMBK_SEL_FOLDER), szFolder, szFolder ) ){ _tcscpy( m_Common.m_sBackup.m_szBackUpFolder, szFolder ); ::DlgItem_SetText( hwndDlg, IDC_EDIT_BACKUPFOLDER, m_Common.m_sBackup.m_szBackUpFolder ); } UpdateBackupFile( hwndDlg ); } return TRUE; default: // 20051107 aroka Default節 追加 GetData( hwndDlg ); UpdateBackupFile( hwndDlg ); } break; /* BN_CLICKED */ case EN_CHANGE: // 20051107 aroka フォルダが変更されたらリアルタイムにエディットボックス内を更新 switch( wID ){ case IDC_EDIT_BACKUPFOLDER: // 2009.02.21 ryoji 後ろに\が追加されるので,1文字余裕をみる必要がある. ::DlgItem_GetText( hwndDlg, IDC_EDIT_BACKUPFOLDER, m_Common.m_sBackup.m_szBackUpFolder, _countof2(m_Common.m_sBackup.m_szBackUpFolder) - 1 ); UpdateBackupFile( hwndDlg ); break; } break; /* EN_CHANGE */ } break; /* WM_COMMAND */ //@@@ 2001.02.04 Start by MIK: Popup Help case WM_HELP: { HELPINFO *p = (HELPINFO *)lParam; MyWinHelp( (HWND)p->hItemHandle, HELP_WM_HELP, (ULONG_PTR)(LPVOID)p_helpids ); // 2006.10.10 ryoji MyWinHelpに変更に変更 } return TRUE; /*NOTREACHED*/ //break; //@@@ 2001.02.04 End //@@@ 2001.12.22 Start by MIK: Context Menu Help //Context Menu case WM_CONTEXTMENU: MyWinHelp( hwndDlg, HELP_CONTEXTMENU, (ULONG_PTR)(LPVOID)p_helpids ); // 2006.10.10 ryoji MyWinHelpに変更に変更 return TRUE; //@@@ 2001.12.22 End } return FALSE; }
/* ダイアログデータの取得 */ int CPropBackup::GetData( HWND hwndDlg ) { /* バックアップの作成 */ m_Common.m_sBackup.m_bBackUp = ::IsDlgButtonCheckedBool( hwndDlg, IDC_CHECK_BACKUP ); /* バックアップの作成前に確認 */ m_Common.m_sBackup.m_bBackUpDialog = ::IsDlgButtonCheckedBool( hwndDlg, IDC_CHECK_BACKUPDIALOG ); // /* 指定フォルダにバックアップを作成する */ // 20051107 aroka 「バックアップの作成」に連動させる // m_Common.m_sBackup.m_bBackUpFolder = ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUPFOLDER ); /* バックアップファイル名のタイプ 1=(.bak) 2=*_日付.* */ if( ::IsDlgButtonChecked( hwndDlg, IDC_RADIO_BACKUP_TYPE1 ) ){ // Jun. 5, 2005 genta 拡張子を残すパターンを追加 if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_RETAINEXT )){ m_Common.m_sBackup.SetBackupType(5); } else { m_Common.m_sBackup.SetBackupType(1); } } // if( ::IsDlgButtonChecked( hwndDlg, IDC_RADIO_BACKUP_TYPE2 ) ){ // 2001/06/05 Start by asa-o: 日付のタイプ if( ::IsDlgButtonChecked( hwndDlg, IDC_RADIO_BACKUP_DATETYPE1 ) ){ m_Common.m_sBackup.SetBackupType(2); // 現時刻 } if( ::IsDlgButtonChecked( hwndDlg, IDC_RADIO_BACKUP_DATETYPE2 ) ){ m_Common.m_sBackup.SetBackupType(4); // 前回の保存時刻 } // 2001/06/05 End // } // Aug. 16, 2000 genta // 3 = *.b?? if( ::IsDlgButtonChecked( hwndDlg, IDC_RADIO_BACKUP_TYPE3 ) ){ if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_RETAINEXT )){ m_Common.m_sBackup.SetBackupType(6); } else { m_Common.m_sBackup.SetBackupType(3); } } /* バックアップファイル名:日付の年 */ m_Common.m_sBackup.SetBackupOpt(BKUP_YEAR, ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_YEAR ) == BST_CHECKED); /* バックアップファイル名:日付の月 */ m_Common.m_sBackup.SetBackupOpt(BKUP_MONTH, ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_MONTH ) == BST_CHECKED); /* バックアップファイル名:日付の日 */ m_Common.m_sBackup.SetBackupOpt(BKUP_DAY, ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_DAY ) == BST_CHECKED); /* バックアップファイル名:日付の時 */ m_Common.m_sBackup.SetBackupOpt(BKUP_HOUR, ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_HOUR ) == BST_CHECKED); /* バックアップファイル名:日付の分 */ m_Common.m_sBackup.SetBackupOpt(BKUP_MIN, ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_MIN ) == BST_CHECKED); /* バックアップファイル名:日付の秒 */ m_Common.m_sBackup.SetBackupOpt(BKUP_SEC, ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_SEC ) == BST_CHECKED); /* 指定フォルダにバックアップを作成する */ // 20051107 aroka 移動 m_Common.m_sBackup.m_bBackUpFolder = ::IsDlgButtonCheckedBool( hwndDlg, IDC_CHECK_BACKUPFOLDER ); m_Common.m_sBackup.m_bBackUpFolderRM = ::IsDlgButtonCheckedBool( hwndDlg, IDC_CHECK_BACKUP_FOLDER_RM ); // 2010/5/27 Uchi /* バックアップを作成するフォルダ */ // Oct. 5, 2002 genta サイズをsizeof()で指定 // Oct. 8, 2002 genta 後ろに\が追加されるので,1文字余裕を見る必要がある. ::DlgItem_GetText( hwndDlg, IDC_EDIT_BACKUPFOLDER, m_Common.m_sBackup.m_szBackUpFolder, _countof2(m_Common.m_sBackup.m_szBackUpFolder) - 1); /* バックアップファイルをごみ箱に放り込む */ //@@@ 2001.12.11 add MIK m_Common.m_sBackup.m_bBackUpDustBox = (BST_CHECKED==::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_DUSTBOX )); //@@@ 2001.12.11 add MIK /* 指定フォルダにバックアップを作成する詳細設定 */ // 20051107 aroka m_Common.m_sBackup.m_bBackUpPathAdvanced = (BST_CHECKED==::IsDlgButtonChecked( hwndDlg, IDC_CHECK_BACKUP_ADVANCED )); /* バックアップを作成するフォルダ */ // 20051107 aroka ::DlgItem_GetText( hwndDlg, IDC_EDIT_BACKUPFILE, m_Common.m_sBackup.m_szBackUpPathAdvanced, _countof2( m_Common.m_sBackup.m_szBackUpPathAdvanced ) - 1); // 20051128 aroka 詳細設定の日付のタイプ if( ::IsDlgButtonChecked( hwndDlg, IDC_RADIO_BACKUP_DATETYPE1A ) ){ m_Common.m_sBackup.SetBackupTypeAdv(2); // 現時刻 } if( ::IsDlgButtonChecked( hwndDlg, IDC_RADIO_BACKUP_DATETYPE2A ) ){ m_Common.m_sBackup.SetBackupTypeAdv(4); // 前回の保存時刻 } // From Here Aug. 16, 2000 genta // 世代数の取得 int nN; nN = ::GetDlgItemInt( hwndDlg, IDC_EDIT_BACKUP_3, NULL, FALSE ); // Oct. 29, 2001 genta // for( nN = 0, pDigit = szNumBuf; *pDigit != '\0'; pDigit++ ){ // if( '0' <= *pDigit && *pDigit <= '9' ){ // nN = nN * 10 + *pDigit - '0'; // } // else // break; // } nN = nN < 1 ? 1 : nN; nN = nN > 99 ? 99 : nN; m_Common.m_sBackup.SetBackupCount( nN ); // To Here Aug. 16, 2000 genta return TRUE; }
/*! 独自拡張プロパティシートのウィンドウプロシージャ @author ryoji @date 2007.05.25 新規 */ static LRESULT CALLBACK PropSheetWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch( uMsg ){ case WM_SHOWWINDOW: // 追加ボタンの位置を調整する if( wParam ){ HWND hwndBtn; RECT rcOk; RECT rcTab; POINT pt; hwndBtn = ::GetDlgItem( hwnd, 0x02000 ); ::GetWindowRect( ::GetDlgItem( hwnd, IDOK ), &rcOk ); ::GetWindowRect( PropSheet_GetTabControl( hwnd ), &rcTab ); pt.x = rcTab.left; pt.y = rcOk.top; ::ScreenToClient( hwnd, &pt ); ::MoveWindow( hwndBtn, pt.x, pt.y, DpiScaleX(140), rcOk.bottom - rcOk.top, FALSE ); } break; case WM_COMMAND: // 追加ボタンが押された時はその処理を行う if( HIWORD( wParam ) == BN_CLICKED && LOWORD( wParam ) == 0x02000 ){ HWND hwndBtn = ::GetDlgItem( hwnd, 0x2000 ); RECT rc; POINT pt; // メニューを表示する ::GetWindowRect( hwndBtn, &rc ); pt.x = rc.left; pt.y = rc.bottom; GetMonitorWorkRect( pt, &rc ); // モニタのワークエリア HMENU hMenu = ::CreatePopupMenu(); ::InsertMenu( hMenu, 0, MF_BYPOSITION | MF_STRING, 100, LS(STR_SHELL_MENU_OPEN) ); ::InsertMenu( hMenu, 1, MF_BYPOSITION | MF_STRING, 101, LS(STR_SHELL_MENU_IMPEXP) ); int nId = ::TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD, ( pt.x > rc.left )? pt.x: rc.left, ( pt.y < rc.bottom )? pt.y: rc.bottom, 0, hwnd, NULL ); ::DestroyMenu( hMenu ); // 選択されたメニューの処理 switch( nId ){ case 100: // 設定フォルダを開く TCHAR szPath[_MAX_PATH]; GetInidir( szPath ); // フォルダの ITEMIDLIST を取得して ShellExecuteEx() で開く // Note. MSDN の ShellExecute() の解説にある方法でフォルダを開こうとした場合、 // フォルダと同じ場所に <フォルダ名>.exe があるとうまく動かない。 // verbが"open"やNULLではexeのほうが実行され"explore"では失敗する // (フォルダ名の末尾に'\\'を付加してもWindows 2000では付加しないのと同じ動作になってしまう) LPSHELLFOLDER pDesktopFolder; if( SUCCEEDED(::SHGetDesktopFolder(&pDesktopFolder)) ){ LPMALLOC pMalloc; if( SUCCEEDED(::SHGetMalloc(&pMalloc)) ){ LPITEMIDLIST pIDL; WCHAR pwszDisplayName[_MAX_PATH]; _tcstowcs(pwszDisplayName, szPath, _countof(pwszDisplayName)); //#ifdef _UNICODE // pwszDisplayName = szPath; //#else // WCHAR wszPath[_MAX_PATH]; // ::MultiByteToWideChar( CP_ACP, 0, szPath, -1, wszPath, _MAX_PATH ); // pwszDisplayName = wszPath; //#endif if( SUCCEEDED(pDesktopFolder->ParseDisplayName(NULL, NULL, pwszDisplayName, NULL, &pIDL, NULL)) ){ SHELLEXECUTEINFO si; ::ZeroMemory( &si, sizeof(si) ); si.cbSize = sizeof(si); si.fMask = SEE_MASK_IDLIST; si.lpVerb = _T("open"); si.lpIDList = pIDL; si.nShow = SW_SHOWNORMAL; ::ShellExecuteEx( &si ); // フォルダを開く pMalloc->Free( (void*)pIDL ); } pMalloc->Release(); } pDesktopFolder->Release(); } break; case 101: // インポート/エクスポートの起点リセット(起点を設定フォルダにする) int nMsgResult = MYMESSAGEBOX( hwnd, MB_OKCANCEL | MB_ICONINFORMATION, GSTR_APPNAME, LS(STR_SHELL_IMPEXPDIR) ); if( IDOK == nMsgResult ) { DLLSHAREDATA *pShareData = &GetDllShareData(); GetInidir( pShareData->m_sHistory.m_szIMPORTFOLDER ); AddLastChar( pShareData->m_sHistory.m_szIMPORTFOLDER, _countof2(pShareData->m_sHistory.m_szIMPORTFOLDER), _T('\\') ); } break; } } break; case WM_DESTROY: ::SetWindowLongPtr( hwnd, GWLP_WNDPROC, (LONG_PTR)s_pOldPropSheetWndProc ); break; } return ::CallWindowProc( s_pOldPropSheetWndProc, hwnd, uMsg, wParam, lParam ); }
/* TRUE==正常 FALSE==入力エラー */ int CDlgGrep::GetData( void ) { /* サブフォルダからも検索する*/ m_bSubFolder = ::IsDlgButtonChecked( GetHwnd(), IDC_CHK_SUBFOLDER ); m_pShareData->m_Common.m_sSearch.m_bGrepSubFolder = m_bSubFolder; /* Grep:サブフォルダも検索 */ /* この編集中のテキストから検索する */ m_bFromThisText = ::IsDlgButtonChecked( GetHwnd(), IDC_CHK_FROMTHISTEXT ); /* 英大文字と英小文字を区別する */ m_sSearchOption.bLoHiCase = (0!=::IsDlgButtonChecked( GetHwnd(), IDC_CHK_LOHICASE )); //2001/06/23 N.Nakatani /* 単語単位で検索 */ m_sSearchOption.bWordOnly = (0!=::IsDlgButtonChecked( GetHwnd(), IDC_CHK_WORD )); /* 正規表現 */ m_sSearchOption.bRegularExp = (0!=::IsDlgButtonChecked( GetHwnd(), IDC_CHK_REGULAREXP )); /* 文字コード自動判別 */ // m_bKanjiCode_AutoDetect = ::IsDlgButtonChecked( GetHwnd(), IDC_CHK_KANJICODEAUTODETECT ); /* 文字コードセット */ { int nIdx; HWND hWndCombo = ::GetDlgItem( GetHwnd(), IDC_COMBO_CHARSET ); nIdx = Combo_GetCurSel( hWndCombo ); m_nGrepCharSet = (ECodeType)Combo_GetItemData( hWndCombo, nIdx ); } /* 行を出力/該当部分/否マッチ行 を出力 */ if( ::IsDlgButtonChecked( GetHwnd(), IDC_RADIO_OUTPUTLINE ) ){ m_nGrepOutputLineType = 1; }else if( ::IsDlgButtonChecked( GetHwnd(), IDC_RADIO_NOHIT ) ){ m_nGrepOutputLineType = 2; }else{ m_nGrepOutputLineType = 0; } /* Grep: 出力形式 */ if( FALSE != ::IsDlgButtonChecked( GetHwnd(), IDC_RADIO_OUTPUTSTYLE1 ) ){ m_nGrepOutputStyle = 1; /* Grep: 出力形式 */ } if( FALSE != ::IsDlgButtonChecked( GetHwnd(), IDC_RADIO_OUTPUTSTYLE2 ) ){ m_nGrepOutputStyle = 2; /* Grep: 出力形式 */ } if( FALSE != ::IsDlgButtonChecked( GetHwnd(), IDC_RADIO_OUTPUTSTYLE3 ) ){ m_nGrepOutputStyle = 3; } m_bGrepOutputFileOnly = IsDlgButtonCheckedBool( GetHwnd(), IDC_CHECK_FILE_ONLY ); m_bGrepOutputBaseFolder = IsDlgButtonCheckedBool( GetHwnd(), IDC_CHECK_BASE_PATH ); m_bGrepSeparateFolder = IsDlgButtonCheckedBool( GetHwnd(), IDC_CHECK_SEP_FOLDER ); /* 検索文字列 */ int nBufferSize = ::GetWindowTextLength( GetItemHwnd(IDC_COMBO_TEXT) ) + 1; std::vector<TCHAR> vText(nBufferSize); ::DlgItem_GetText( GetHwnd(), IDC_COMBO_TEXT, &vText[0], nBufferSize); m_strText = to_wchar(&vText[0]); m_bSetText = true; /* 検索ファイル */ ::DlgItem_GetText( GetHwnd(), IDC_COMBO_FILE, m_szFile, _countof2(m_szFile) ); /* 検索フォルダ */ ::DlgItem_GetText( GetHwnd(), IDC_COMBO_FOLDER, m_szFolder, _countof2(m_szFolder) ); m_pShareData->m_Common.m_sSearch.m_nGrepCharSet = m_nGrepCharSet; // 文字コード自動判別 m_pShareData->m_Common.m_sSearch.m_nGrepOutputLineType = m_nGrepOutputLineType; // 行を出力/該当部分/否マッチ行 を出力 m_pShareData->m_Common.m_sSearch.m_nGrepOutputStyle = m_nGrepOutputStyle; // Grep: 出力形式 m_pShareData->m_Common.m_sSearch.m_bGrepOutputFileOnly = m_bGrepOutputFileOnly; m_pShareData->m_Common.m_sSearch.m_bGrepOutputBaseFolder = m_bGrepOutputBaseFolder; m_pShareData->m_Common.m_sSearch.m_bGrepSeparateFolder = m_bGrepSeparateFolder; //やめました // if( 0 == wcslen( m_szText ) ){ // WarningMessage( GetHwnd(), _T("検索のキーワードを指定してください。") ); // return FALSE; // } if( 0 != auto_strlen( m_szFile ) ){ CGrepEnumKeys enumKeys; int nErrorNo = enumKeys.SetFileKeys( m_szFile ); if( 1 == nErrorNo ){ WarningMessage( GetHwnd(), LS(STR_DLGGREP2) ); return FALSE; }else if( nErrorNo == 2 ){ WarningMessage( GetHwnd(), LS(STR_DLGGREP3) ); return FALSE; } } /* この編集中のテキストから検索する */ if( m_szFile[0] == _T('\0') ){ // Jun. 16, 2003 Moca // 検索パターンが指定されていない場合のメッセージ表示をやめ、 // 「*.*」が指定されたものと見なす. _tcscpy( m_szFile, _T("*.*") ); } if( m_szFolder[0] == _T('\0') ){ WarningMessage( GetHwnd(), LS(STR_DLGGREP4) ); return FALSE; } { //カレントディレクトリを保存。このブロックから抜けるときに自動でカレントディレクトリは復元される。 CCurrentDirectoryBackupPoint cCurDirBackup; // 2011.11.24 Moca 複数フォルダ指定 std::vector<std::tstring> vPaths; CGrepAgent::CreateFolders( m_szFolder, vPaths ); int nFolderLen = 0; TCHAR szFolder[_MAX_PATH]; szFolder[0] = _T('\0'); for( int i = 0 ; i < (int)vPaths.size(); i ++ ){ // 相対パス→絶対パス if( !::SetCurrentDirectory( vPaths[i].c_str() ) ){ WarningMessage( GetHwnd(), LS(STR_DLGGREP5) ); return FALSE; } TCHAR szFolderItem[_MAX_PATH]; ::GetCurrentDirectory( _MAX_PATH, szFolderItem ); // ;がフォルダ名に含まれていたら""で囲う if( auto_strchr( szFolderItem, _T(';') ) ){ szFolderItem[0] = _T('"'); ::GetCurrentDirectory( _MAX_PATH, szFolderItem + 1 ); auto_strcat(szFolderItem, _T("\"")); } int nFolderItemLen = auto_strlen( szFolderItem ); if( _MAX_PATH < nFolderLen + nFolderItemLen + 1 ){ WarningMessage( GetHwnd(), LS(STR_DLGGREP6) ); return FALSE; } if( i ){ auto_strcat( szFolder, _T(";") ); } auto_strcat( szFolder, szFolderItem ); nFolderLen = auto_strlen( szFolder ); } auto_strcpy( m_szFolder, szFolder ); } //@@@ 2002.2.2 YAZAKI CShareData.AddToSearchKeyArr()追加に伴う変更 /* 検索文字列 */ if( 0 < m_strText.size() ){ // From Here Jun. 26, 2001 genta // 正規表現ライブラリの差し替えに伴う処理の見直し int nFlag = 0; nFlag |= m_sSearchOption.bLoHiCase ? 0x01 : 0x00; if( m_sSearchOption.bRegularExp && !CheckRegexpSyntax( m_strText.c_str(), GetHwnd(), true, nFlag) ){ return FALSE; } // To Here Jun. 26, 2001 genta 正規表現ライブラリ差し替え if( m_strText.size() < _MAX_PATH ){ CSearchKeywordManager().AddToSearchKeyArr( m_strText.c_str() ); m_pShareData->m_Common.m_sSearch.m_sSearchOption = m_sSearchOption; // 検索オプション } }else{ // 2014.07.01 空キーも登録する CSearchKeywordManager().AddToSearchKeyArr( L"" ); } // この編集中のテキストから検索する場合、履歴に残さない Uchi 2008/5/23 if (!m_bFromThisText) { /* 検索ファイル */ CSearchKeywordManager().AddToGrepFileArr( m_szFile ); /* 検索フォルダ */ CSearchKeywordManager().AddToGrepFolderArr( m_szFolder ); } return TRUE; }