The information in this section applies to both Explorer-style and old-style Open and Save As dialog boxes.
Before calling the GetOpenFileName or GetSaveFileName functions, the lpstrFile member of the OPENFILENAME structure must point to the buffer to receive the filename. The nMaxFile member must specify the size, in bytes (ANSI version) or 16-bit characters (Unicode version), of the lpstrFile buffer.
If the user specifies a filename and clicks the OK button, the dialog box copies the selected drive, directory, and filename to the lpstrFile buffer. The function also sets the nFileOffset and nFileExtension members to the offsets, in bytes (ANSI version) or 16-bit characters (Unicode version), from the start of the buffer to the filename and to the filename extension, respectively.
To retrieve just the filename and extension, set the lpstrFileTitle member to point to a buffer and set the nMaxFileTitle member to the size, in bytes (ANSI version) or 16-bit characters (Unicode version), of the buffer. Alternatively, you can pass the lpstrFile buffer in a call to the GetFileTitle function to get the display name of the selected file. Note, however, that the filename that GetFileTitle returns includes an extension only if that is the user's preference for displaying filenames.
The dialog box uses the current directory for the calling process as the initial directory from which to display files and directories. Use the GetCurrentDirectory or SetCurrentDirectory functions to get or change your current directory. To specify a different initial directory without changing your current directory, use the lpstrInitialDir member to specify the name of a directory. The dialog box automatically changes your current directory when the user selects a different drive or directory. To prevent the dialog box from changing your current directory, set the OFN_NOCHANGEDIR flag. This flag does not prevent the user from changing directories to find a file.
To specify a default filename extension, use the lpstrDefExt member. If the user specifies a filename that does not have an extension, the dialog box adds your default extension. If you specify a default extension and the user specifies a filename with a different extension, the dialog box sets the OFN_EXTENSIONDIFFERENT flag.
To let the user select more than one file from a directory, set the OFN_ALLOWMULTISELECT flag. For compatibility with older applications, the default multiple selection dialog box uses the old-style user interface. To display an Explorer-style multiple selection dialog box, you must also set the OFN_EXPLORER flag.
If the user selects more than one file, the buffer pointed to by the lpstrFile member returns the path to the current directory followed by the filenames of the selected files. The nFileOffset member is the offset to the first filename, and the nFileExtension member is not used. The following table describes the difference between Explorer-style and old-style dialog boxes in returning multiple filenames.
Dialog box style | Description |
---|---|
Explorer-style dialog boxes | The directory and filename strings are NULL separated, with an extra NULL character after the last filename. This format enables the Explorer-style dialogs to return long filenames that include spaces. |
Old-style dialog boxes | The directory and filename strings are separated by spaces. For filenames with spaces, the function uses short filenames. |
You can use the FindFirstFile function to convert between long and short filenames.