Chinaunix首页 | 论坛 | 博客
  • 博客访问: 831705
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2367
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

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 对话框,经过检查,是如下问题造成:

阅读(1983) | 评论(9) | 转发(0) |
给主人留下些什么吧!~~

网友评论2012-11-23 15:42:39

elva
不是微软的问题,删掉机器上的pdfshell.dll就可以了。呵呵

网友评论2012-11-23 15:42:31

100000
不知道 为什么 星星的 blog最近更新的特别慢啊?!
每天都想 看看 星星的blog 学习学习~~

网友评论2012-11-23 15:42:25

pcasa
应该是与某些系统更新的补丁有关

网友评论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

网友评论2012-11-23 15:42:10

yqever
我试了好几次都没问题。