使用MFC的CFileDialog类保存文件时,遇到了一个小小的问题,当我在文件名栏中写入带扩展名的名字时,CFileDialog不判断该扩展名是否符合我的要求。比如我规定的扩展名是.vvt。当输入a.bmp时我预期想得到的文件名应该是a.bmp.vvt。但是系统依然给我返回a.bmp.vvt。(word实现了这个功能,大家可以实验一下,咳咳)
怎么办?
我在点击OK的时候修改了不就完了。于是乎,baidu,google,MSDN。。。。+实验实验。最后搞定了,办法如下:
重载OnFileNameOK()
BOOL CMyFileDlg::OnFileNameOK()
{
……
//如果扩展名不是我想要的进行以下修改
//修改窗口显示
CString str;
CComboBox *pcmb13=(CComboBox *)GetParent()->GetDlgItem(cmb13);
pcmb13->GetWindowText(str);
str+=_T(".vvt");
pcmb13->SetWindowText(str);
pcmb13->RedrawWindow();
//修改路径值
CString strPathNmae=GetPathName();
strPathNmae +=_T(".vtf");
#ifdef _UNICODE
memcpy((void*)this->m_ofn.lpstrFile, strPathNmae.GetBuffer(0), strPathNmae.GetLength()*2+2);
#else
memcpy((void*)this->m_ofn.lpstrFile, strPathNmae.GetBuffer(0), strPathNmae.GetLength()+1);
#endif
//修改文件名
CString strFileName=GetFileName();
strFileName +=_T(".vtf");
#ifdef _UNICODE
memcpy((void*)this->m_ofn.lpstrFileTitle, strFileName.GetBuffer(0), strFileName.GetLength()*2+2);
#else
memcpy((void*)this->m_ofn.lpstrFileTitle, strFileName.GetBuffer(0), strFileName.GetLength()+1);
#endif
//等待,不等待也可以,就是动作太快人眼看不到
Sleep(50);
//判断文件是否存在,这时系统可就不判断文件是否存在了,需要自己动手丰衣足食了
//************
//需要#include <io.h>
//************
if((_taccess(strFileName ,0) == 0))
{//存在,-1不存在。//
//存在当然要提示是否覆盖了!!怎么处理就看你想怎么办了
……
}
return CFileDialog::OnFileNameOK();
}
看着不错,还算好用,不过留点作业吧(很有用的知识哦),自己动手丰衣足食。
1. cmb13是什么?
2. 为什么要进行RedrawWindow()操作?
3. 为什么在UNICODE时strFileName.GetLength()要乘2?为什么还要加一个数?
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1765520
评论