使用XP风格的打开文件对话框
使用MFC开发时,MFC提供的CFileDialg类进行选择文件时,打开的对话框是98风格的,新的XP风格左边有一个包含”我的电脑”"我的文档”等的快捷选项,用起来比较方便.使用下面的代码可以实现在使用MFC进行开发时使用XP风格的打开文件对话框:
CString OpenFileXPStyle()
{
// TODO: Add your control notification handler code here
char name[4096];
name[0] = '';
OPENFILENAME ofn;
memset( &ofn, 0, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = m_hWnd;
ofn.lpstrFilter = "文本文件(*.txt)*.txt";
ofn.nFilterIndex = 1;
ofn.lpstrFile = name;
ofn.nMaxFile = 4096;
ofn.lpstrTitle = "选择文件";
ofn.Flags = OFN_CREATEPROMPT|OFN_ENABLESIZING|OFN_HIDEREADONLY;
CString file_path;
if( ::GetOpenFileName( &ofn ) )
{
file_path = ofn.lpstrFile; //打开的文件名
}
return file_path;
}
CFileDialog内部其实也是调用GetOpenFileName来打开文件对话框.OPENFILENAME的第一个字段指定该结构的大小.Windows的GetOpenFileName函数通过OPENFILENAME的大小来判断是使用新风格还是使用老风格.
在2000和XP中,OPENFILENAME结构新增加了数据成员.如果用的是老版本的windows头文件,编译的时候便是原来的结构大小,如果是win2000以后的头文件,使用的结构的大小就变大了.而MFC不知道新的结构成员的存在,所以MFC程序编译时,size还是老的大小,打开的还是老式的对话框.