打开对话框允许用户指定要打开的文件或文件集的驱动器,目录和名称。您可以通过初始化OPENFILENAME结构并将结构传递给GetOpenFileName函数来创建并显示“打开”对话框。
“另存为”对话框允许用户指定要保存的文件的驱动器,目录和名称。您可以通过初始化OPENFILENAME结构并将结构传递给GetSaveFileName函数来创建并显示另存为对话框。
从Windows 95和Windows NT版本4.0开始,有一个新版本的“打开和另存为”对话框,提供类似于Windows资源管理器的用户界面功能。但是,Win32将继续支持用于必须保持与早期版本的Windows一致的用户界面的应用程序的旧式打开和另存为对话框。
除了外观上的差异外,Explorer风格和旧式对话框在使用自定义模板和钩子程序来定制对话框方面有所不同。但是,Explorer风格和旧式对话框对于大多数基本操作具有相同的行为,例如指定文件名过滤器,验证用户的输入以及获取用户指定的文件名。有关资源管理器样式和旧式对话框的详细信息,请参阅打开并另存为定制。下图显示了典型的资源管理器式打开对话框。
下图显示了一个典型的Explorer风格的另存为对话框。
如果用户指定文件名并单击确定按钮,则GetOpenFileName或GetSaveFileName返回TRUE。OPENFILENAME结构lpstrFile成员指向的缓冲区包含用户指定的完整路径和文件名。
如果用户取消打开或另存为对话框或发生错误,该函数返回FALSE。要确定错误的原因,请调用CommDlgExtendedError函数来检索扩展错误值。如果lpstrFile缓冲区太小,无法接收全名,CommDlgExtendedError将返回FNERR_BUFFERTOOSMALL,并且lpstrFile成员指向的缓冲区的前2个字节设置为整数值,指定接收完整数据所需的大小名称。
资源管理器样式对话框仅适用于32位应用程序。16位应用程序无法使用thunking显示资源管理器样式的对话框。
Windows 95:使用旧式对话框的32位应用程序使用thunk来实现。这意味着传递给你的钩子过程的任何指针都是数据的非持久性副本。例如,在WM_INITDIALOG消息中传递的OPENFILENAME指针不是指向您最初指定的缓冲区的指针。如果您需要将私有数据传递给挂钩过程,请将其绑定到一个结构中,并存储指向OPENFILENAME结构的lCustData成员中的结构的指针。