cfiledialog(c++ CFileDialog m_ofn用法)
本文目录
c++ CFileDialog m_ofn用法
// OFN_NOCHANGEDIR就是不改变当前目录
CFileDialog openDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT||OFN_NOCHANGEDIR,"音效文件 (*.wav)|*.wav|所有文件 (*.*)|*.*||");
openDlg.m_ofn.lpstrInitialDir=".\\Save";
if (IDOK==openDlg.DoModal())
{
// openDlg.m_ofn.lpstrInitialDir=".\\";
c_sound.PlayBGMusic(1);
}
CFileDialog保存文件问题
在 pFileDlg-》m_ofn.lpstrFile=cf; 前加上下面这句话:
pFileDlg-》m_ofn.nMaxFile = 256;
运行通过
原因如下:
MSDN中关于CFileDialog有以下原文:
Do this by replacing m_ofn.lpstrFile with a pointer to a buffer you have allocated, after c***tructing the CFileDialog, but before calling DoModal. Additionally, you must set m_ofn.nMaxFile with the number of characters in the buffer pointed to by m_ofn.lpstrFile.
大意就是要指定nMaxFile值,否则你在按下保存后
pFileDlg变为NULL了(与API的内部实现方式有关)
WTL中的CFileDialog使用
class CMyFileDialog : public CFileDialogImpl《CMyFileDialog》
{
public:
// C***truction
CMyFileDialog ( BOOL bOpenFileDialog,
_U_STRINGorID szDefExt = 0U,
_U_STRINGorID szFileName = 0U,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_U_STRINGorID szFilter = 0U,
HWND hwndParent = NULL );
// Maps
BEGIN_M**_MAP(CMyFileDialog)
CHAIN_M**_MAP(CFileDialogImpl《CMyFileDialog》)
END_M**_MAP()
// Overrides
void OnInitDone ( LPOFNOTIFY lpon );
protected:
CString m_sDefExt, m_sFileName, m_sFilter;
LPCTSTR PrepFilterString ( CString& sFilter );
};
//////////////////////////////////////////////////////////////////////
// CMyFileDialog
CMyFileDialog::CMyFileDialog (
BOOL bOpenFileDialog, _U_STRINGorID szDefExt, _U_STRINGorID szFileName,
DWORD dwFlags, _U_STRINGorID szFilter, HWND hwndParent ) :
CFileDialogImpl《CMyFileDialog》(bOpenFileDialog, NULL, NULL, 0,
NULL, hwndParent),
m_sDefExt(szDefExt.m_lpstr), m_sFileName(szFileName.m_lpstr),
m_sFilter(szFilter.m_lpstr)
{
m_ofn.lpstrDefExt = m_sDefExt;
m_ofn.Flags |= dwFlags;
m_ofn.lpstrFilter = PrepFilterString ( m_sFilter );
// setup initial file name
if ( !m_sFileName.IsEmpty() )
lstrcpyn ( m_szFileName, m_sFileName, _MAX_PATH );
}
void CMyFileDialog::OnInitDone ( LPOFNOTIFY lpon )
{
GetFileDialogWindow().CenterWindow ( lpon-》lpOFN-》hwndOwner );
}
LPCTSTR CMyFileDialog::PrepFilterString ( CString& sFilter )
{
LPTSTR psz = sFilter.GetBuffer(0);
LPCTSTR pszRet = psz;
while ( ’\0’ != *psz )
{
if ( ’|’ == *psz )
*psz++ = ’\0’;
else
psz = CharNext ( psz );
}
return pszRet;
}
使用方法:
CMyFileDialog fd (true, _T("*.*"));
if ( IDOK == fd.DoModal(*this) )
{
USES_CONVERSION;
char* pFilePath = T2A(fd.m_szFileName);
}
关于MFC的CFileDialog类的问题
太复杂,CFileDialog本来就有个文件同名提示选项,
CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );
OFN_OVERWRITEPROMPT?
更多文章:
tensorflow文档(如何理解tensorflow中的dimension)
2026年4月12日 11:40
mysql触发器语句(phpmyadmin的mysql触发器如何操作)
2026年4月12日 11:20
构造函数的作用c(c++类中,默认构造函数究竟有什么作用为何声明对象后就要自动调用它这有何意义)
2026年4月12日 10:40
特效视频app(有什么可以美化视频的软件(视频美化软件app))
2026年4月12日 10:20
cfiledialog(c++ CFileDialog m_ofn用法)
2026年4月12日 09:20
shell命令grep(grep赋值给变量为什么会变成一行)
2026年4月12日 09:00




