读书人

超级奇怪的有关问题CFileDialog的打

发布时间: 2012-03-23 12:06:21 作者: rapoo

超级奇怪的问题,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;

读书人网 >VC/MFC

热点推荐