正文

转CFileDialog的扩展名问题   2007-09-19 10:48:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/29520.html

分享到:

使用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(); }   如果文件类型列表框中有多个,但我还想在初始化的时候选择最后一个(比如*.*,系统默认选择第一个类型项)。 办法:在DoModal()之前写上一句 m_FileDlg.GetOFN().nFileterIndex=4;//4是*.*在列表中的位置,第一行为1 !@##¥……点OK搞定了,慢!我又想知道你到底最后选定那一行呢?有人说了“看最后的扩展名不就得了”,老兄如果两个扩展名相同类型不同呢,比如保存不同压缩比的图像文件时,同样都是.JPEG,但压缩比不同,这时只凭扩展名就得不到了。------> 不罗嗦了,办法:还是m_FileDlg.GetOFN().nFileterIndex,在DoModal()之后就是你选的行号! 看着不错,还算好用,不过留点作业吧(很有用的知识哦),自己动手丰衣足食。 1.         cmb13是什么? 2.         为什么要进行RedrawWindow()操作? 3.         为什么在UNICODE时strFileName.GetLength()要乘2?为什么还要加一个数?  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1765520

阅读(9521) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册