2012年(158)
分类: C/C++
2012-11-23 15:41:08
说CFileDialog有bug,先看一个现象吧:我用的是英文XP, 用的是中文XP,用的是2003
1. 打开windows自带的记事本程序
2. 菜单中选择save
as,顺便输入一个名字,比如test.txt,点保存
3. 菜单中选择save
as,把鼠标移到test.txt上(不是编辑框里面的test.txt,而是文件list里面的test.txt)
4.
此时整个进程crash掉,如果没有的话,重复第2步(提示:如果鼠标移动速度慢一些,基本上100%crash)
然后我用代码测试,再测试,……,发现不是MFC
CFileDialog的问题,而是API GetSaveFileName的问题,代码如下:
void
Capp32Dlg::OnBnClickedButton1()
{
TCHAR m_szFileName[_MAX_PATH] =
_T("");
TCHAR m_szFileTitle[64] = _T("");
OPENFILENAME a = {
sizeof(OPENFILENAME)
,
this->m_hWnd
,
(HINSTANCE)0x00400000
, 0
,
0
, 0
,
0
, m_szFileName
,
_MAX_PATH
, m_szFileTitle
,
64
, 0
,
0
, 0
,
0
, 0
,
0
, 0
,
0
, 0 };
GetSaveFileName( &a );
//CFileDialog dlg( FALSE );
//dlg.DoModal();
}
在第二次(或第三次,或……)时,鼠标一旦移动到上次保存的文件上就crash。
-----------------------------------------------------------------------------------------------
说 GetOpenFileName
也一样:不管是保存还是取消,只要移动到上一次对话框退出时最后一次Tip的图标时,都会crash, 快捷方式和目录图标上都不会Crash,
好像只有文件时
1 Open
2 移动鼠标到文件图标上,直到出现黄色的Tip
3 退出
4 再次Open
5
快速移动到上次的那个文件图标上,
6 看看能出现黄色的Tip吗?
祈祷吧
-----------------------------------------------------------------------------------------------
说 关于Save As 对话框,经过检查,是如下问题造成:
网友评论2012-11-23 15:42:18
HYJ
俺这儿是程序退出。。。。
跟综调用堆栈如下:
00ddf37c 7d6ffe56 000c6f18 000e65c0 00ddf3d0 SHELL32!CFSFolder::GetDetail***+0x43c
00ddfde8 7d6fff9a 00ddfe20 00ddfe68 7d6f95e5 SHELL32!CInfoTip::_GetInfoTipFromItem+0x169
00ddfdf4 7d6f95e5 000d5f20 00000008 00ddfe20 SHELL32!CInfoTip::GetInfoTip+0x1c
00ddfe68 7d5c208d 000e63a8 000e2ab0 000d75c0 SHELL32!CStatusBarAndInfoTipTask::RunInitRT+0xf5
00ddfe84 75ef1b9a 000e63a8 75ef1b18 75ef0000 SHELL32!CRunnableTa