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