void CMruListener::OnAfterLoad(const SLoadInfo& sLoadInfo) { CEditDoc* pcDoc = GetListeningDoc(); CMRUFile cMRU; EditInfo eiOld; bool bIsExistInMRU = cMRU.GetEditInfo(pcDoc->m_cDocFile.GetFilePath(),&eiOld); //キャレット位置の復元 if( bIsExistInMRU && GetDllShareData().m_Common.m_sFile.GetRestoreCurPosition() ){ //キャレット位置取得 CLayoutPoint ptCaretPos; pcDoc->m_cLayoutMgr.LogicToLayout(eiOld.m_ptCursor, &ptCaretPos); //ビュー取得 CEditView& cView = pcDoc->m_pcEditWnd->GetActiveView(); if( ptCaretPos.GetY2() >= pcDoc->m_cLayoutMgr.GetLineCount() ){ //ファイルの最後に移動 cView.GetCommander().HandleCommand( F_GOFILEEND, false, 0, 0, 0, 0 ); } else{ cView.GetTextArea().SetViewTopLine( eiOld.m_nViewTopLine ); // 2001/10/20 novice cView.GetTextArea().SetViewLeftCol( eiOld.m_nViewLeftCol ); // 2001/10/20 novice // From Here Mar. 28, 2003 MIK // 改行の真ん中にカーソルが来ないように。 const CDocLine *pTmpDocLine = pcDoc->m_cDocLineMgr.GetLine( eiOld.m_ptCursor.GetY2() ); // 2008.08.22 ryoji 改行単位の行番号を渡すように修正 if( pTmpDocLine ){ if( pTmpDocLine->GetLengthWithoutEOL() < eiOld.m_ptCursor.x ) ptCaretPos.x--; } // To Here Mar. 28, 2003 MIK cView.GetCaret().MoveCursor( ptCaretPos, true ); cView.GetCaret().m_nCaretPosX_Prev = cView.GetCaret().GetCaretLayoutPos().GetX2(); } } // ブックマーク復元 // 2002.01.16 hor if( bIsExistInMRU ){ if( GetDllShareData().m_Common.m_sFile.GetRestoreBookmarks() ){ CBookmarkManager(&pcDoc->m_cDocLineMgr).SetBookMarks(eiOld.m_szMarkLines); } } else{ eiOld.m_szMarkLines[0] = L'\0'; } // MRUリストへの登録 EditInfo eiNew; pcDoc->GetEditInfo(&eiNew); // 2014.07.04 ブックマークの保持(エディタが落ちたときブックマークが消えるため) if( bIsExistInMRU ){ if( GetDllShareData().m_Common.m_sFile.GetRestoreBookmarks() ){ // SetBookMarksでデータがNUL区切りに書き換わっているので再取得 cMRU.GetEditInfo(pcDoc->m_cDocFile.GetFilePath(),&eiOld); auto_strcpy(eiNew.m_szMarkLines, eiOld.m_szMarkLines); } } cMRU.Add( &eiNew ); }
static void SetGrepFolder( HWND hwndCtrl, LPCTSTR folder ) { if( auto_strchr( folder, _T(';')) ){ TCHAR szQuoteFolder[MAX_PATH]; szQuoteFolder[0] = _T('"'); auto_strcpy( szQuoteFolder + 1, folder ); auto_strcat( szQuoteFolder, _T("\"") ); ::SetWindowText( hwndCtrl, szQuoteFolder ); }else{ ::SetWindowText( hwndCtrl, folder ); } }
/* 外部ヘルプ1 @date 2012.09.26 Moca HTMLHELP対応 */ void CViewCommander::Command_EXTHELP1( void ) { retry:; if( CHelpManager().ExtWinHelpIsSet( &(GetDocument()->m_cDocType.GetDocumentAttribute()) ) == false){ // if( 0 == wcslen( GetDllShareData().m_Common.m_szExtHelp1 ) ){ ErrorBeep(); //From Here Sept. 15, 2000 JEPRO // [Esc]キーと[x]ボタンでも中止できるように変更 if( IDYES == ::MYMESSAGEBOX( NULL, MB_YESNOCANCEL | MB_ICONEXCLAMATION | MB_APPLMODAL | MB_TOPMOST, GSTR_APPNAME, //To Here Sept. 15, 2000 LS(STR_ERR_CEDITVIEW_CMD01) ) ){ /* 共通設定 プロパティシート */ if( !CEditApp::getInstance()->OpenPropertySheet( ID_PROPCOM_PAGENUM_HELPER ) ){ return; } goto retry; } // Jun. 15, 2000 genta else{ return; } } CNativeW cmemCurText; const TCHAR* helpfile = CHelpManager().GetExtWinHelp( &(GetDocument()->m_cDocType.GetDocumentAttribute()) ); /* 現在カーソル位置単語または選択範囲より検索等のキーを取得 */ m_pCommanderView->GetCurrentTextForSearch( cmemCurText, false ); TCHAR path[_MAX_PATH]; if( _IS_REL_PATH( helpfile ) ){ // 2003.06.23 Moca 相対パスは実行ファイルからのパス // 2007.05.21 ryoji 相対パスは設定ファイルからのパスを優先 GetInidirOrExedir( path, helpfile ); }else{ auto_strcpy( path, helpfile ); } // 2012.09.26 Moca HTMLHELP対応 TCHAR szExt[_MAX_EXT]; _tsplitpath( path, NULL, NULL, NULL, szExt ); if( 0 == _tcsicmp(szExt, _T(".chi")) || 0 == _tcsicmp(szExt, _T(".chm")) || 0 == _tcsicmp(szExt, _T(".col")) ){ std::wstring pathw = to_wchar(path); Command_EXTHTMLHELP( pathw.c_str(), cmemCurText.GetStringPtr() ); }else{ ::WinHelp( m_pCommanderView->m_hwndParent, path, HELP_KEY, (ULONG_PTR)cmemCurText.GetStringPtr() ); } return; }
/*! @return 機能が割り当てられているキーストロークの数 @date Oct. 31, 2001 genta 動的な機能名に対応するため引数追加 @date 2007.02.22 ryoji デフォルト機能割り当てに関する処理を追加 */ int CKeyBind::CreateKeyBindList( HINSTANCE hInstance, //!< [in] インスタンスハンドル int nKeyNameArrNum, //!< [in] KEYDATA* pKeyNameArr, //!< [out] CNativeW& cMemList, //!< CFuncLookup* pcFuncLookup, //!< [in] 機能番号→名前の対応を取る BOOL bGetDefFuncCode //!< [in] ON:デフォルト機能割り当てを使う/OFF:使わない デフォルト:TRUE ) { int i; int j; int nValidKeys; WCHAR pszStr[256]; WCHAR szFuncName[256]; WCHAR szFuncNameJapanese[256]; nValidKeys = 0; cMemList.SetString(LTEXT("")); const WCHAR* pszSHIFT = LTEXT("Shift+"); const WCHAR* pszCTRL = LTEXT("Ctrl+"); const WCHAR* pszALT = LTEXT("Alt+"); const WCHAR* pszTAB = LTEXT("\t"); const WCHAR* pszCR = LTEXT("\r\n"); //\r=0x0d=CRを追加 cMemList.AppendString( LSW(STR_ERR_DLGKEYBIND1) ); cMemList.AppendString( pszCR ); cMemList.AppendString( LTEXT("-----\t-----\t-----\t-----\t-----") ); cMemList.AppendString( pszCR ); for( j = 0; j < 8; ++j ){ for( i = 0; i < nKeyNameArrNum; ++i ){ int iFunc = GetFuncCodeAt( pKeyNameArr[i], j, bGetDefFuncCode ); if( 0 != iFunc ){ nValidKeys++; if( j & _SHIFT ){ cMemList.AppendString( pszSHIFT ); } if( j & _CTRL ){ cMemList.AppendString( pszCTRL ); } if( j & _ALT ){ cMemList.AppendString( pszALT ); } cMemList.AppendString( to_wchar(pKeyNameArr[i].m_szKeyName) ); // Oct. 31, 2001 genta if( !pcFuncLookup->Funccode2Name( iFunc, szFuncNameJapanese, 255 )){ auto_strcpy( szFuncNameJapanese, LSW(STR_ERR_DLGKEYBIND2) ); } szFuncName[0] = LTEXT('\0'); /*"---unknown()--"*/ // /* 機能名日本語 */ // ::LoadString( // hInstance, // pKeyNameArr[i].m_nFuncCodeArr[j], // szFuncNameJapanese, 255 // ); cMemList.AppendString( pszTAB ); cMemList.AppendString( szFuncNameJapanese ); /* 機能ID→関数名,機能名日本語 */ //@@@ 2002.2.2 YAZAKI マクロをCSMacroMgrに統一 CSMacroMgr::GetFuncInfoByID( hInstance, iFunc, szFuncName, szFuncNameJapanese ); /* 関数名 */ cMemList.AppendString( pszTAB ); cMemList.AppendString( szFuncName ); /* 機能番号 */ cMemList.AppendString( pszTAB ); auto_sprintf( pszStr, LTEXT("%d"), iFunc ); cMemList.AppendString( pszStr ); /* キーマクロに記録可能な機能かどうかを調べる */ cMemList.AppendString( pszTAB ); //@@@ 2002.2.2 YAZAKI マクロをCSMacroMgrに統一 if( CSMacroMgr::CanFuncIsKeyMacro( iFunc ) ){ cMemList.AppendString( LTEXT("○") ); }else{ cMemList.AppendString( LTEXT("×") ); } cMemList.AppendString( pszCR ); } } } return nValidKeys; }
/* 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; }
BOOL CDlgPrintSetting::OnBnClicked( int wID ) { TCHAR szWork[256]; CDlgInput1 cDlgInput1; HWND hwndComboSettingName; switch( wID ){ case IDC_BUTTON_HELP: /* 「印刷ページ設定」のヘルプ */ //Stonee, 2001/03/12 第四引数を、機能番号からヘルプトピック番号を調べるようにした MyWinHelp( GetHwnd(), HELP_CONTEXT, ::FuncID_To_HelpContextID(F_PRINT_PAGESETUP) ); // 2006.10.10 ryoji MyWinHelpに変更に変更 return TRUE; case IDC_BUTTON_EDITSETTINGNAME: _tcscpy( szWork, m_PrintSettingArr[m_nCurrentPrintSetting].m_szPrintSettingName ); { BOOL bDlgInputResult=cDlgInput1.DoModal( m_hInstance, GetHwnd(), LS(STR_DLGPRNST1), LS(STR_DLGPRNST2), _countof( m_PrintSettingArr[m_nCurrentPrintSetting].m_szPrintSettingName ) - 1, szWork ); if( !bDlgInputResult ){ return TRUE; } } if( szWork[0] != _T('\0') ){ int size = _countof(m_PrintSettingArr[0].m_szPrintSettingName) - 1; _tcsncpy( m_PrintSettingArr[m_nCurrentPrintSetting].m_szPrintSettingName, szWork, size); m_PrintSettingArr[m_nCurrentPrintSetting].m_szPrintSettingName[size] = _T('\0'); /* 印刷設定名一覧 */ hwndComboSettingName = GetItemHwnd( IDC_COMBO_SETTINGNAME ); Combo_ResetContent( hwndComboSettingName ); int nSelectIdx; int i; int nItemIdx; nSelectIdx = 0; for( i = 0; i < MAX_PRINTSETTINGARR; ++i ){ nItemIdx = Combo_AddString( hwndComboSettingName, m_PrintSettingArr[i].m_szPrintSettingName ); Combo_SetItemData( hwndComboSettingName, nItemIdx, i ); if( i == m_nCurrentPrintSetting ){ nSelectIdx = nItemIdx; } } Combo_SetCurSel( hwndComboSettingName, nSelectIdx ); } return TRUE; case IDC_BUTTON_FONT_HEAD: { LOGFONT lf = m_PrintSettingArr[m_nCurrentPrintSetting].m_lfHeader; INT nPointSize; if (lf.lfFaceName[0] == _T('\0')) { // 半角フォントを設定 auto_strcpy( lf.lfFaceName, m_PrintSettingArr[m_nCurrentPrintSetting].m_szPrintFontFaceHan ); // 1/10mm→画面ドット数 lf.lfHeight = -( m_PrintSettingArr[m_nCurrentPrintSetting].m_nPrintFontHeight * ::GetDeviceCaps ( ::GetDC( m_hwndParent ), LOGPIXELSY ) / 254 ); } if (MySelectFont( &lf, &nPointSize, GetHwnd(), false)) { m_PrintSettingArr[m_nCurrentPrintSetting].m_lfHeader = lf; m_PrintSettingArr[m_nCurrentPrintSetting].m_nHeaderPointSize = nPointSize; SetFontName( IDC_STATIC_FONT_HEAD, IDC_CHECK_USE_FONT_HEAD, m_PrintSettingArr[m_nCurrentPrintSetting].m_lfHeader, m_PrintSettingArr[m_nCurrentPrintSetting].m_nHeaderPointSize ); UpdatePrintableLineAndColumn(); } } return TRUE; case IDC_BUTTON_FONT_FOOT: { LOGFONT lf = m_PrintSettingArr[m_nCurrentPrintSetting].m_lfFooter; INT nPointSize; if (lf.lfFaceName[0] == _T('\0')) { // 半角フォントを設定 auto_strcpy( lf.lfFaceName, m_PrintSettingArr[m_nCurrentPrintSetting].m_szPrintFontFaceHan ); // 1/10mm→画面ドット数 lf.lfHeight = -( m_PrintSettingArr[m_nCurrentPrintSetting].m_nPrintFontHeight * ::GetDeviceCaps ( ::GetDC( m_hwndParent ), LOGPIXELSY ) / 254 ); } if (MySelectFont( &lf, &nPointSize, GetHwnd(), false)) { m_PrintSettingArr[m_nCurrentPrintSetting].m_lfFooter = lf; m_PrintSettingArr[m_nCurrentPrintSetting].m_nFooterPointSize = nPointSize; SetFontName( IDC_STATIC_FONT_FOOT, IDC_CHECK_USE_FONT_FOOT, m_PrintSettingArr[m_nCurrentPrintSetting].m_lfFooter, m_PrintSettingArr[m_nCurrentPrintSetting].m_nFooterPointSize ); UpdatePrintableLineAndColumn(); } } return TRUE; case IDC_CHECK_USE_FONT_HEAD: if (m_PrintSettingArr[m_nCurrentPrintSetting].m_lfHeader.lfFaceName[0] != _T('\0')) { memset( &m_PrintSettingArr[m_nCurrentPrintSetting].m_lfHeader, 0, sizeof(LOGFONT) ); m_PrintSettingArr[m_nCurrentPrintSetting].m_nHeaderPointSize = 0; SetFontName( IDC_STATIC_FONT_HEAD, IDC_CHECK_USE_FONT_HEAD, m_PrintSettingArr[m_nCurrentPrintSetting].m_lfHeader, m_PrintSettingArr[m_nCurrentPrintSetting].m_nHeaderPointSize ); } UpdatePrintableLineAndColumn(); return TRUE; case IDC_CHECK_USE_FONT_FOOT: if (m_PrintSettingArr[m_nCurrentPrintSetting].m_lfFooter.lfFaceName[0] != _T('\0')) { memset( &m_PrintSettingArr[m_nCurrentPrintSetting].m_lfFooter, 0, sizeof(LOGFONT) ); m_PrintSettingArr[m_nCurrentPrintSetting].m_nFooterPointSize = 0; SetFontName( IDC_STATIC_FONT_FOOT, IDC_CHECK_USE_FONT_FOOT, m_PrintSettingArr[m_nCurrentPrintSetting].m_lfFooter, m_PrintSettingArr[m_nCurrentPrintSetting].m_nFooterPointSize ); } UpdatePrintableLineAndColumn(); return TRUE; case IDOK: if( CalcPrintableLineAndColumn() ){ /* ダイアログデータの取得 */ ::EndDialog( GetHwnd(), GetData() ); } return TRUE; case IDCANCEL: ::EndDialog( GetHwnd(), FALSE ); return TRUE; case IDC_RADIO_PORTRAIT: case IDC_RADIO_LANDSCAPE: UpdatePrintableLineAndColumn(); break; // ここでは行と桁の更新要求のみ。後の処理はCDialogに任せる。 case IDC_CHECK_LINENUMBER: UpdatePrintableLineAndColumn(); break; // ここでは行と桁の更新要求のみ。後の処理はCDialogに任せる。 } /* 基底クラスメンバ */ return CDialog::OnBnClicked( wID ); }
/*! 「ファイル名を付けて保存」ダイアログ @date 2001.02.09 genta 改行コードを示す引数追加 @date 2003.03.30 genta ファイル名未定時の初期ディレクトリをカレントフォルダに @date 2003.07.20 ryoji BOMの有無を示す引数追加 @date 2006.11.10 ryoji ユーザー指定の拡張子を状況依存で変化させる */ bool CDocFileOperation::SaveFileDialog( SSaveInfo* pSaveInfo //!< [out] ) { //拡張子指定 // 一時適用や拡張子なしの場合の拡張子をタイプ別設定から持ってくる // 2008/6/14 大きく改造 Uchi TCHAR szDefaultWildCard[_MAX_PATH + 10]; // ユーザー指定拡張子 { LPCTSTR szExt; const STypeConfig& type = m_pcDocRef->m_cDocType.GetDocumentAttribute(); //ファイルパスが無い場合は *.txt とする if(!this->m_pcDocRef->m_cDocFile.GetFilePathClass().IsValidPath()){ szExt = _T(""); } else { szExt = this->m_pcDocRef->m_cDocFile.GetFilePathClass().GetExt(); } if (type.m_nIdx == 0) { // 基本 if (szExt[0] == _T('\0')) { // ファイルパスが無いまたは拡張子なし _tcscpy(szDefaultWildCard, _T("*.txt")); } else { // 拡張子あり _tcscpy(szDefaultWildCard, _T("*")); _tcscat(szDefaultWildCard, szExt); } } else { szDefaultWildCard[0] = _T('\0'); CDocTypeManager::ConvertTypesExtToDlgExt(type.m_szTypeExts, szExt, szDefaultWildCard); } if(!this->m_pcDocRef->m_cDocFile.GetFilePathClass().IsValidPath()){ //「新規から保存時は全ファイル表示」オプション // 2008/6/15 バグフィックス Uchi if( GetDllShareData().m_Common.m_sFile.m_bNoFilterSaveNew ) _tcscat(szDefaultWildCard, _T(";*.*")); // 全ファイル表示 } else { //「新規以外から保存時は全ファイル表示」オプション if( GetDllShareData().m_Common.m_sFile.m_bNoFilterSaveFile ) _tcscat(szDefaultWildCard, _T(";*.*")); // 全ファイル表示 } } // 無題に、無題番号を付ける if( pSaveInfo->cFilePath[0] == _T('\0') ){ const EditNode* node = CAppNodeManager::getInstance()->GetEditNode( m_pcDocRef->m_pcEditWnd->GetHwnd() ); if( 0 < node->m_nId ){ TCHAR szText[16]; auto_sprintf(szText, _T("%d"), node->m_nId); auto_strcpy(pSaveInfo->cFilePath, LS(STR_NO_TITLE2)); // 無題 auto_strcat(pSaveInfo->cFilePath, szText); } } // ダイアログを表示 CDlgOpenFile cDlgOpenFile; cDlgOpenFile.Create( G_AppInstance(), CEditWnd::getInstance()->GetHwnd(), szDefaultWildCard, CSakuraEnvironment::GetDlgInitialDir().c_str(), // 初期フォルダ CMRUFile().GetPathList(), // 最近のファイル CMRUFolder().GetPathList() // 最近のフォルダ ); return cDlgOpenFile.DoModalSaveDlg( pSaveInfo, pSaveInfo->eCharCode == CODE_CODEMAX ); }