在VC6中实现OFN_EXPLORER风格的文件对话框
2009-02-27 20:03:07 来源:WEB开发网在VC2005中,sizeof(OPENFILENAME)已经是新结构的长度了,并且专门定义了旧结构长度的宏定义OPENFILENAME_SIZE_VERSION_400。m_ofn在CFileDialog类中通过__declspec(property(get=GetOFN))声明成了“虚数据成员”,并不存在,实际是通过GetOFN函数访问的新申请的m_pOFN空间。
所以,在VC6中,就没有使用支持OFN_EXPLORER风格的Windows 2000以上系统的OPENFILENAME结构,自然就无法显示新的界面了。
3 解决办法
当然最简单的解决办法是换用2005开发。
如果必须使用VC6,在Codejock Xtreme Toolkit Pro软件中,CXTBrowseEdit类ChooseFile函数提供了一个解决的方法:
// Check to see if this is Windows 2000 or later, if so use the
// Windows 2000 version of OPENFILENAME.
if (XTOSVersionInfo()->IsWin2KOrGreater() && sizeof(OPENFILENAME) < 88 && dlg.m_ofn.lStructSize < 88)
{
// Windows 2000 version of OPENFILENAME has three extra members,
// this was copied from newer version of commdlg.h...
struct OPENFILENAMEEX
{
void* pvReserved; // 4 bytes
DWORD dwReserved; // 4 bytes
DWORD FlagsEx; // 4 bytes
};
// should equal an additional 12 bytes;
dlg.m_ofn.lStructSize += sizeof(OPENFILENAMEEX);
}
更多精彩
赞助商链接