|
|
/*--------------------------------------------------------------------------*
* * Microsoft Windows * Copyright (C) Microsoft Corporation, 1992 - 1999 * * File: amcdocmg.cpp * * Contents: Implementation file for CAMCDocManager * * History: 01-Jan-98 jeffro Created * *--------------------------------------------------------------------------*/
#include "stdafx.h"
#include "amcdocmg.h"
#include "amc.h" // for AMCGetApp
#include "filedlgex.h"
void AppendFilterSuffix(CString& filter, OPENFILENAME_NT4& ofn, CDocTemplate* pTemplate, CString* pstrDefaultExt);
/*--------------------------------------------------------------------------*
* CAMCDocManager::DoPromptFileName * * We need to override this so we can set the default directory. The MFC * implementation lets the system choose the default, which due to a NT5.0 * change, is not always the current directory. This implementation specifically * requests the current directory. *--------------------------------------------------------------------------*/
// This and the following method were copied from MFC sources because we needed
// to modify the internal handling of the file dialog options. The added code
// sections are commented (MMC change).
BOOL CAMCDocManager::DoPromptFileName(CString& fileName, UINT nIDSTitle, DWORD lFlags, BOOL bOpenFileDialog, CDocTemplate* pTemplate) { //
// MMC change: Set the default directory (sets to admin tools the first time called)
//
CAMCApp* pApp = AMCGetApp(); pApp->SetDefaultDirectory ();
CFileDialogEx dlgFile(bOpenFileDialog);
CString title; VERIFY(title.LoadString(nIDSTitle)); // this uses MFC's LoadString because that is where the string resides.
dlgFile.m_ofn.Flags |= (lFlags | OFN_ENABLESIZING);
CString strFilter; CString strDefault; if (pTemplate != NULL) { ASSERT_VALID(pTemplate); AppendFilterSuffix(strFilter, dlgFile.m_ofn, pTemplate, &strDefault); } else { // do for all doc template
POSITION pos = m_templateList.GetHeadPosition(); BOOL bFirst = TRUE; while (pos != NULL) { CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetNext(pos); AppendFilterSuffix(strFilter, dlgFile.m_ofn, pTemplate, bFirst ? &strDefault : NULL); bFirst = FALSE; } }
// append the "*.*" all files filter
CString allFilter; VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER)); // this uses MFC's LoadString because that is where the string resides.
strFilter += allFilter; strFilter += (TCHAR)'\0'; // next string please
strFilter += _T("*.*"); strFilter += (TCHAR)'\0'; // last string
dlgFile.m_ofn.nMaxCustFilter++;
dlgFile.m_ofn.lpstrFilter = strFilter; dlgFile.m_ofn.lpstrTitle = title; dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH);
//
// MMC change: Set the initial dir to the current dir
//
TCHAR szDir[_MAX_PATH]; GetCurrentDirectory(countof(szDir), szDir); dlgFile.m_ofn.lpstrInitialDir = szDir;
BOOL bResult = dlgFile.DoModal() == IDOK ? TRUE : FALSE; fileName.ReleaseBuffer();
return bResult; }
void AppendFilterSuffix(CString& filter, OPENFILENAME_NT4& ofn, CDocTemplate* pTemplate, CString* pstrDefaultExt) { ASSERT_VALID(pTemplate); ASSERT_KINDOF(CDocTemplate, pTemplate);
CString strFilterExt, strFilterName; if (pTemplate->GetDocString(strFilterExt, CDocTemplate::filterExt) && !strFilterExt.IsEmpty() && pTemplate->GetDocString(strFilterName, CDocTemplate::filterName) && !strFilterName.IsEmpty()) { // a file based document template - add to filter list
ASSERT(strFilterExt[0] == '.'); if (pstrDefaultExt != NULL) { // set the default extension
*pstrDefaultExt = ((LPCTSTR)strFilterExt) + 1; // skip the '.'
ofn.lpstrDefExt = (LPTSTR)(LPCTSTR)(*pstrDefaultExt); ofn.nFilterIndex = ofn.nMaxCustFilter + 1; // 1 based number
}
// add to filter
filter += strFilterName; ASSERT(!filter.IsEmpty()); // must have a file type name
filter += (TCHAR)'\0'; // next string please
filter += (TCHAR)'*'; filter += strFilterExt; filter += (TCHAR)'\0'; // next string please
ofn.nMaxCustFilter++; } }
|