WEB开发网
开发学院软件开发VC 在VC6中实现OFN_EXPLORER风格的文件对话框 阅读

在VC6中实现OFN_EXPLORER风格的文件对话框

 2009-02-27 20:03:07 来源:WEB开发网   
核心提示: 可以看出,在Windows 2000以上操作系统中编译(查阅MSDN可知0x0500对应2000系统),在VC6中实现OFN_EXPLORER风格的文件对话框(2),就会多出3个变量,lStructSize这个值也就不同了,(2)对比CFileDialog::CFileDialog函数

可以看出,在Windows 2000以上操作系统中编译(查阅MSDN可知0x0500对应2000系统),就会多出3个变量,lStructSize这个值也就不同了。

操作系统根据这些识别OPENFILENAME版本,从而打开不同的文件对话框。

其实,这就是VC所带的SDK头文件的区别。Windows2000以上操作系统的SDK是支持这个属性的。VC6发行较早,头文件应该还是Windows NT的。

(2)对比CFileDialog::CFileDialog函数

在VC6的该函数处理中,直接指定了OPENFILENAME结构的长度:

       memset(&m_ofn, 0, sizeof(m_ofn)); // initialize structure to 0/NULL

       ……

       m_ofn.lStructSize = sizeof(m_ofn);

       ……

而在VC2005中,检测了操作系统的版本,然后设置不同长度:

       // determine size of OPENFILENAME struct if dwSize is zero

       if (dwSize == 0)

       {

              OSVERSIONINFO vi;

              ZeroMemory(&vi, sizeof(OSVERSIONINFO));

              vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

              ::GetVersionEx(&vi);

              // if running under NT and version is >= 5

              if (vi.dwPlatformId == VER_PLATFORM_WIN32_NT && vi.dwMajorVersion >= 5)

                     dwSize = sizeof(OPENFILENAME);

              else

                     dwSize = OPENFILENAME_SIZE_VERSION_400;

       }

 

       // size of OPENFILENAME must be at least version 4

       ASSERT(dwSize >= OPENFILENAME_SIZE_VERSION_400);

       // allocate memory for OPENFILENAME struct based on size passed in

       m_pOFN = static_cast<LPOPENFILENAME>(malloc(dwSize));

       ASSERT(m_pOFN != NULL);

       if (m_pOFN == NULL)

              AfxThrowMemoryException();

 

       memset(&m_ofn, 0, dwSize); // initialize structure to 0/NULL

       ……

       m_ofn.lStructSize = dwSize;

       ……

上一页  1 2 3 4  下一页

Tags:VC 实现 OFN

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接