📄 bxfiledialogdocmanager.cpp
字号:
// BXFileDialogDocManager.cpp : implementation of the BXFileDialogDocManager class
//
#include "StdAfx.h"
#include "BXFileDialog_Priv.h"
#include "BXFileDialog.h"
#include "BXFileDialogDocManager.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
static void AFXAPI _AppendFilterSuffix(CString& filter, OPENFILENAME& 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++;
}
}
BXFileDialogDocManager::BXFileDialogDocManager(void)
{
m_eAppearance = BXFileDialog::APPEARANCE_DEFAULT;
}
void BXFileDialogDocManager::SetAppearance(BXFileDialog::eAppearance eApp)
{
m_eAppearance = eApp;
}
// prompt for file name - used for open and save as
BOOL BXFileDialogDocManager::DoPromptFileName( CString& fileName,
UINT nIDSTitle,
DWORD lFlags,
BOOL bOpenFileDialog,
CDocTemplate* pTemplate) // if pTemplate==NULL => all document templates
{
// AJM 22.9.2000 don't switch on this - Win2k dialog won't appear anyway
// unless we compile with VC7 or do something clever
/*
OS_VERSION_INFO WinVerInfo;
if (::GetOSVersion(&WinVerInfo) && ::IsWindows2000(&WinVerInfo) )
{
// Don't use BXFileDialog on Win2k (it's got a better one already)
return CDocManager::DoPromptFileName(fileName, nIDSTitle, lFlags, bOpenFileDialog, pTemplate);
}
*/
BXFileDialog dlgFile(bOpenFileDialog, FALSE);
dlgFile.SetAppearance(m_eAppearance);
CString title;
VERIFY(title.LoadString(nIDSTitle));
dlgFile.m_ofn.Flags |= lFlags;
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 = GetFirstDocTemplatePosition();
BOOL bFirst = TRUE;
while (pos != NULL)
{
CDocTemplate* pTemplate = (CDocTemplate*)GetNextDocTemplate(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));
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);
int nResult = dlgFile.DoModal();
fileName.ReleaseBuffer();
return (nResult == IDOK);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -