首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

超级奇怪的有关问题,CFileDialog的打开路径不受程序动态控制

2012-03-23 
超级奇怪的问题,CFileDialog的打开路径不受程序动态控制我想用CFileDialog打开我的应用程序所在的当前路径

超级奇怪的问题,CFileDialog的打开路径不受程序动态控制
我想用CFileDialog打开我的应用程序所在的当前路径,关键代码如下。但是就是不起作用,每次打开时都是前一次打开的文件路径。
奇怪的是,如果我直接把打开路径设置为C盘,CFileDialog就很听话地打开C盘。而我如果是程序动态获取的位置,CFileDialog就是不听使唤。
太奇怪了,谁能解决这个问题,分数全部相送,谢谢各位啦~~~~~~~~~
----------------------------------
CString   historyData;
CFileDialog   myFileDialog(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "txt   files   (*.txt)|*.txt|All   files   (*.*)|*.* ",NULL);
myFileDialog.m_ofn.lpstrInitialDir   =   GetExePath();//???为什么不起作用呢?用 "C:\\ "却起作用
//myFileDialog.m_ofn.lpstrInitialDir   =   "C:\\ ";
if(myFileDialog.DoModal()==IDOK)
historyData=myFileDialog.GetPathName();
else
return;
----------------------------------
GetPathName的函数定义如下,我调试过没有问题,用MessageBox把返回值弹出来正好是应用程序所在的目录,如放在C盘的话,返回值是 "C:\ "

//获得当前程序所在的路径
char*   CMySnifferDlg::GetExePath()
{
char   buff[255];
GetModuleFileName(NULL,buff,254);//程序完整路径加程序名
int   len=strlen(buff);
while(len> 0   &&   buff[len-1]   != '\\ ')len--;//去掉程序名,得到路径
buff[len]=0;
char   *str=buff;
return   str;
}

[解决办法]
局部变量的问题。

TCHAR szPath[MAX_PATH] = {0};
::GetModuleFileName(hInst, szPath, MAX_PATH);
::PathRemoveFileSpec(szPath);
myFileDialog.m_ofn.lpstrInitialDir = szPath;

热点排行