奇怪的CFileDialog类(急,在线等)

syy64 2004-06-22 09:29:14
void CCity3DDoc::OnReadTinFile()
{
POSITION FileNamePosition;
char ForTinFileName[128];
CTINObj * tin;

//if(!SetDog()) return;
CFileDialog DataFileName(TRUE,"*.TIN","*.TIN",OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"TIN files(*.TIN)|*.TIN|All(*.*)|*.*|");
if(DataFileName.DoModal()!=IDOK) return; //对话框出来后,选中文件名,确定后,程序停留在这儿不动,好象死在这儿,对话框界面一直在,鼠标还能动,F11调试也进不去类库
CWaitCursor wait;
if((FileNamePosition = DataFileName.GetStartPosition( )) == NULL) return;
while(FileNamePosition != NULL)
{
strcpy(ForTinFileName,DataFileName.GetNextPathName(FileNamePosition));
tin = new CTINObj;
tin->ReadTinFile(ForTinFileName,TRUE);

Env.MaxPoint3D.Maximal(tin->MaxPoint3D);
Env.MinPoint3D.Minimal(tin->MinPoint3D);
Env.RoamGesture.EyePoint3D = Env.MinPoint3D+Env.MaxPoint3D;
Env.RoamGesture.EyePoint3D *= 0.5;
Env.RoamGesture.StarePoint3D = Env.RoamGesture.EyePoint3D;
Env.RoamGesture.EyePoint3D.z += 2;
Env.RoamGesture.EyePoint3D.y -= 20;
DataBlock.AddTINObj(tin);
DataBlock.pCurTINObj = tin;

PrjData tPrjData;
tPrjData.iType = PRJ_TIN_SIMP;
strcpy(tPrjData.FileName,ForTinFileName);
strcpy(tPrjData.ImgFileName,"XXXXX");
tPrjData.ImgOrg[X] = 0;
tPrjData.ImgOrg[Y] = 0;
tPrjData.Reslution = 0;
PrjObject.Add(tPrjData);
UpDatePrj = true;
}
OnRepaintAllViews() ;
}

我的程序以前一直用的好好的,昨天下午也不知道动了什么地方,就开始出现上述情况,程序中所有用CFileDialog打开文件的地方都出现上述情况,可是我的别的程序用CFileDialog打开同样的文件一切正常,我的这个程序CFileDialog怎么哪?有谁知道?
...全文
369 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
CsdnRob 2004-07-02
  • 打赏
  • 举报
回复
http://forum.javaeye.com/viewtopic.php?t=3387 看看这个例了
syy64 2004-06-23
  • 打赏
  • 举报
回复
问题已解决,是前天我为了适合开大空间,link的heap和stack参数设置过大,我计算机的内存是一个G,我设heap500兆,不过当时没错,不知怎么,后来就有错了,我现在把参数改小了,就行了,感谢各位的支持,结帖。
tybitsfox 2004-06-23
  • 打赏
  • 举报
回复
CFileDialog DataFileName(TRUE,"*.TIN","*.TIN",OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"TIN files(*.TIN)|*.TIN|All(*.*)|*.*||");<----加上||
蒋晟 2004-06-23
  • 打赏
  • 举报
回复
3721之类用全局Hook劫持地址栏然后进行自动提示的会造成这样的问题
把3721,百度伴侣之类的卸载
syy64 2004-06-23
  • 打赏
  • 举报
回复
to:xdsh00():试过了,情况依然。
xdsh00 2004-06-23
  • 打赏
  • 举报
回复
以前好用不能代表现在也好用!
你把下面的代码都引起来,调试cfiledialog看看!
syy64 2004-06-23
  • 打赏
  • 举报
回复
to:hopen(哈雷):你没有看我上面的帖子吧?我是用CFileDialog类打开文件的,况且以前也是这么用的,一直用的好好。
hopen 2004-06-23
  • 打赏
  • 举报
回复
是不是没有给m_ofn分配空间的问题
MSDN上面的例子是给m_ofn分配空间的,如果不分配可能有时会有问题。只是根据你代码猜测的
msdn上的例子:
OPENFILENAME ofn; // common dialog box structure
char szFile[260]; // buffer for file name
HWND hwnd; // owner window
HANDLE hf; // file handle

// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Display the Open dialog box.

if (GetOpenFileName(&ofn)==TRUE)
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
syy64 2004-06-23
  • 打赏
  • 举报
回复
to:hopen(哈雷)应该没问题,因为我别的程序用的时候都没问题,况且我的程序较大,去掉不现实。
hopen 2004-06-23
  • 打赏
  • 举报
回复
你把多余的代码去掉后,就调试对话框那段看看是否还有问题。
把出错的范围缩到最小
syy64 2004-06-23
  • 打赏
  • 举报
回复
to:once168(once168):不能中断,死在那儿。
to:jiangsheng:是,装了上网助手。

我已经在另外两台计算机上试了,还是同样的问题,看来是我的程序有问题
经过昨天的试验,已有所进展,f11调试能进类库,但死在类库文件(..\mfc\src\dlgfile.cpp)中如下的地方:
int CFileDialog::DoModal()
{
ASSERT_VALID(this);
ASSERT(m_ofn.Flags & OFN_ENABLEHOOK);
ASSERT(m_ofn.lpfnHook != NULL); // can still be a user hook

// zero out the file buffer for consistent parsing later
ASSERT(AfxIsValidAddress(m_ofn.lpstrFile, m_ofn.nMaxFile));
DWORD nOffset = lstrlen(m_ofn.lpstrFile)+1;
ASSERT(nOffset <= m_ofn.nMaxFile);
memset(m_ofn.lpstrFile+nOffset, 0, (m_ofn.nMaxFile-nOffset)*sizeof(TCHAR));

// WINBUG: This is a special case for the file open/save dialog,
// which sometimes pumps while it is coming up but before it has
// disabled the main window.
HWND hWndFocus = ::GetFocus();
BOOL bEnableParent = FALSE;
m_ofn.hwndOwner = PreModal();
AfxUnhookWindowCreate();
if (m_ofn.hwndOwner != NULL && ::IsWindowEnabled(m_ofn.hwndOwner))
{
bEnableParent = TRUE;
::EnableWindow(m_ofn.hwndOwner, FALSE);
}

_AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
ASSERT(pThreadState->m_pAlternateWndInit == NULL);

if (m_ofn.Flags & OFN_EXPLORER)
pThreadState->m_pAlternateWndInit = this;
else
AfxHookWindowCreate(this);

int nResult;
if (m_bOpenFileDialog)
nResult = ::GetOpenFileName(&m_ofn);//F11调试到这儿后,程序弹出对话框后,选了文件名,确定后,程序就样子运行在这儿,总在这儿;对话框中也无法选改变目录;或者自己在文件列表框长时间找文件
else
nResult = ::GetSaveFileName(&m_ofn);

if (nResult)
ASSERT(pThreadState->m_pAlternateWndInit == NULL);
pThreadState->m_pAlternateWndInit = NULL;

// WINBUG: Second part of special case for file open/save dialog.
if (bEnableParent)
::EnableWindow(m_ofn.hwndOwner, TRUE);
if (::IsWindow(hWndFocus))
::SetFocus(hWndFocus);

PostModal();
return nResult ? nResult : IDCANCEL;
}
已经两天,我试很多方法,问题依然存在,我是一点脾气都没有,还得请教各位想办法。
zhangcrony 2004-06-22
  • 打赏
  • 举报
回复
http://soft.tr163.cn/down.asp?id=61&no=1
zhangcrony 2004-06-22
  • 打赏
  • 举报
回复
http://www.xfocus.net/tools/200207/fport.zip
syy64 2004-06-22
  • 打赏
  • 举报
回复
to:carbon107(<:软件开发思想.h>):我在公司工作,发软件可能不太合适,您说的fport v2.0从哪个网站可以下载?我倒可以试试。
想当年,用fortran(dos)下编程的时候没那么多事情,windows,vc++就像一种魔术,让人头大。
windyloft 2004-06-22
  • 打赏
  • 举报
回复
把程序弄到其它机器上试试,
syy64 2004-06-22
  • 打赏
  • 举报
回复
to:zhangcrony(为了不再郁闷地生活,我不得不郁闷地工作):我将我的程序的exe考到另外的一个计算机上试也是同样情况,我也觉得跟我的程序有关,可就是找不出问题来,程序就怕这个,一点脾气都没有,头疼,郁闷呀,感到无助。
carbon107 2004-06-22
  • 打赏
  • 举报
回复
用fport v2.0看系统进程中是否有木马占用了进程的空间,执行一些非法的操作
carbon107 2004-06-22
  • 打赏
  • 举报
回复
请把你的程序发给我吧,我帮你看看
carbon107@etang.com
syy64 2004-06-22
  • 打赏
  • 举报
回复
to:happyparrot(快乐鹦鹉):您说得有一定道理,我计算机的Windows任务管理器界面这段时间出不来,有些网站登录特别慢,可用金山毒霸6和江民杀毒也查不出什么病毒,不过前两个星期我的QQ上好象有“木马”病毒,我QQ自动给别人发消息,说什么张国荣没死之类的,我计算机时常出现怪现象。
zhangcrony 2004-06-22
  • 打赏
  • 举报
回复
看样子你的程序是没错的
加载更多回复(10)

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧