MFC CFileDialog 相对路径

丶灬走出姿态 提交于 2019-12-05 19:22:37

1)在mfc中想按照自己设定的路径来打开fileDialog,其实CFileDialog有自己的变量 m_ofn,该变量为OPENFILENAME的结构体,用户可自己定义一些内容

    例如 打开窗体的名字:

     dlg.m_ofn.lpstrTitle = _T("遥测图片加载");

     按照自己设定的路径打开dlg:

    dlg.m_ofn.lpstrInitialDir = _T("C:\\Documents and Settings\\Administrator\\桌面\\2012.4.16\\DrawProgram1\\YCPicture");

   在这里想说的是,使用相对路径

   dlg.m_ofn.lpstrInitialDir = _T("res\\YCPicture");

总体代码如下:

    CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("图片文件(*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif| 位图文件                    (*.bmp)|*.bmp"),NULL);

//dlg.m_ofn.lpstrInitialDir = _T("C:\\Documents and Settings\\Administrator\\桌面\\2012.4.16\\DrawProgram1\\YCPicture");
/*CString abc = GetSysPath();     获得系统的绝对路径
dlg.m_ofn.lpstrInitialDir = GetSysPath();*/
dlg.m_ofn.lpstrInitialDir = _T("res\\YCPicture");
dlg.m_ofn.lpstrTitle = _T("遥测图片加载");
if (dlg.DoModal() == IDOK)
{
m_state0Str = dlg.GetPathName();
}

以上代码中的相对路径是有问题的,后来拿到另一台机子上测试,发现不正常,后来修改,根据以下获得的绝对路径来完成的:

代码如下:

也就是获得当前的路径后,根据自己的需要做些修改。

CString CYxPropertyDialog::GetSysPath(CString fileName)
{
TCHAR exeFullPath[MAX_PATH];
GetModuleFileName(NULL,exeFullPath, MAX_PATH);
CString szfolder = exeFullPath;
int pos = szfolder.ReverseFind('\\');  
szfolder = szfolder.Left(pos);
pos = szfolder.ReverseFind('D');
szfolder = szfolder.Left(pos);
szfolder += fileName;
//在没遇到一个\ 符号添加一个\ 
/*CString str;
while(szfolder.GetLength()!= fileName.GetLength())
{
int xPos = szfolder.Find('\\');
str += szfolder.Left(xPos+1);
str += '\\';
int xx = szfolder.GetLength();
szfolder = szfolder.Right(szfolder.GetLength()-xPos-1);
}
str += fileName;*/
    //szfolder = _T("C:\\Documents and Settings\\Administrator\\桌面\\DrawProgram1\\Debug");
return szfolder;
}

在调用该函数的部分:

CString strTemp = GetSysPath(_T("YCPicture"));
dlg.m_ofn.lpstrInitialDir = strTemp;
dlg.m_ofn.lpstrTitle = _T("遥测图片加载");

2)获得系统的绝对路径:

这个是摘自网络:

CString dlg::GetSysPath(void)
{
 //CString szFile(_T(""));
 TCHAR exeFullPath[MAX_PATH];
 GetModuleFileName(NULL,exeFullPath, MAX_PATH);
 CString szfolder = exeFullPath;
 int pos = szfolder.ReverseFind('\\');
 szfolder = szfolder.Left(pos+1);
  return szfolder;
}


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!