jac*_*ack 5 c++ mfc cfiledialog
我正在使用CFileDialog,我已经设置了如下所示的初始路径,如代码所示.它不起作用.如果我弄错了,请纠正我.
CFileDialog* filedlg = new CFileDialog(TRUE,(LPCTSTR)NULL , (LPCTSTR)NULL , OFN_HIDEREADONLY| OFN_ENABLESIZING , (LPCTSTR)NULL , FromHandle (hImgDlg) ,0 , FALSE );
filedlg ->m_ofn.lpstrInitialDir = "C:\\" ;
if ( filedlg ->DoModal() == IDOK )
{
/*** do somthing here *****/
}
Run Code Online (Sandbox Code Playgroud)
两种选择: 1.老式对话框风格,指定OFN::lpstrInitialDir
CFileLatinDialog dlg (TRUE, "", "" /*lpszFileName */,
OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY,
"All Files(*.*)|*.*||", this, 0,
FALSE /*bVistaStyle*/);
dlg.m_ofn.lpstrInitialDir = "C:\\Models\\";
Run Code Online (Sandbox Code Playgroud)
CFileLatinDialog dlg (TRUE, "", "C:\\Models\\" /*lpszFileName */, OFN_PATHMUSTEXIST | OFN_PATHMUSTEXIST OFN_FILEMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, “所有文件(*.*)|*.*||”, this);
如果您看到OPENFILENAME结构的参考,您将看到该lpstrInitialDir字段指出:
如果
lpstrInitialDir与应用程序第一次使用Open或Save As对话框时传递的值相同,则用户最近选择的路径将用作初始目录。
这意味着该lpstrInitialDir字段实际上只能在您第一次在程序中使用对话框时使用。其余时间它将使用用户选择的最后一个目录。
如果设置文件名位置,则可以使对话框打开到特定位置.如果您确实需要打开文件夹位置或者您使用的是默认文件名,我只会使用它.
CFileDialog* filedlg = new CFileDialog(TRUE, (LPCTSTR)NULL, (LPCTSTR)_T("C:\\MyFolder\\DefaultFileName.ext"), OFN_HIDEREADONLY | OFN_ENABLESIZING, (LPCTSTR)NULL, FromHandle (hImgDlg), 0, FALSE);
Run Code Online (Sandbox Code Playgroud)
或者您可以使用Windows功能GetModuleFileName:
CString csAppFolder;
TCHAR szPath[MAX_PATH];
// form the path to where we want to store the file
if (GetModuleFileName(NULL, szPath, MAX_PATH))
{
PathRemoveFileSpec(szPath);
csAppFolder = szPath;
}
CFileDialog* filedlg = new CFileDialog(TRUE, (LPCTSTR)NULL, (LPCTSTR)(csAppFolder + _T("\\DefaultFileName.ext")), OFN_HIDEREADONLY | OFN_ENABLESIZING, (LPCTSTR)NULL, FromHandle (hImgDlg), 0, FALSE);
Run Code Online (Sandbox Code Playgroud)