CFileDialog  dlg;
想把第一次打开的位置设置在我的文档,该如何设置,说明一下,网上说系统默认会在我的文档,但是我发现有的时候,这个初始位置会跑到我们开发的软件的安装目录下,所以如何设置使其固定在我的文档呢?
dlg.m_ofn.lpstrInitialDir该设置为什么

解决方案 »

  1.   

    CFileDialog dlg(,,defpath,..)第三个参数可以设置
      

  2.   

    我是这样设置的
     TCHAR   MyDocumentDir[MAX_PATH];              //add for initdir 2012/10/29
          SHGetSpecialFolderPath(   this->GetSafeHwnd(),   MyDocumentDir,   5, 0);
    这个是我的文档的位置,可是以后每次打开都是这个位置,我的意思是只第一次操作时,其他时候记住上次路径
      

  3.   

    char   MyDocumentDir[MAX_PATH]; 
    SHGetSpecialFolderPath(   this-> GetSafeHwnd(),   MyDocumentDir,   CSIDL_PERSONAL,   0   ); 
    CFileDialog   FileOpen(TRUE,   "xls ",   NULL,   0,   "Excel   file(*.xls)|*.xls|All   file(*.*)|*.*|| ",   NULL); 
    FileOpen.m_ofn.lpstrInitialDir   =   MyDocumentDir; 
    FileOpen.DoModal(); 
    CString   filepath   =   FileOpen.GetPathName(); 
      

  4.   

    CFileDialog 如何得到上次打开的路径
      

  5.   


    这个你要靠自己保存了
    用 注册表 或是 ini文件
      

  6.   

    就是CFileDialog里的类函数可以得到当前取得路径,把这个路径保存起来就行了,或者保存到文件,或者注册表里或者INI文件里,由你自己决定存在什么位置.
    如果保存到文件里,先读取这个文件里保存的路径,再赋给dlg.m_ofn.lpstrInitialDir里,如果没有这个文件,就赋给dlg.m_ofn.lpstrInitialDir默认路径
      

  7.   

    对,可以利用代码将自己需要初始化的很多常量保存在ini文件,这个文件很容易操作,有几个函数,百度下ini的文件结构及对应的函数用法即可。
    注册表的话,可能要费点时间去了解与理解,不过好处就是不容易被用户误删,自己看着办吧
      

  8.   

    用GetPrivateProfileString和WritePrivateProfileString读写ini文件
      

  9.   

    void RegisterPath(CString path)
    {
     CWinApp *pApp=AfxGetApp();
     if(path.IsEmpty())
     {//read
       path=pApp->GetProfileString("PATH_SECTION","PATH_NAME");
     }
     else
     {//write
       pApp->WriteProfileString("PATH_SECTION","PATH_NAME",path);
     }
    }调用:
    extern void RegisterPath(CString path);CString path="D:\\XXXX\\YYYY";
    RegisterPath(path);
    path="";
    RegisterPath(path);打开 regedit ,找 InitInstance中给键(即RegisterKey 中的字符串