您的位置:首页 > 编程语言

windows编程,建立打开文件界面

2011-09-30 20:51 323 查看
转自:MSDN

OPENFILENAME Structure

The OPENFILENAME structure contains information that the GetOpenFileName and GetSaveFileName functions use to initialize anOpen orSave As dialog box. After the user closes the dialog box, the system returns
information about the user's selection in this structure.

Syntax
typedef struct tagOFN {
DWORD         lStructSize;
HWND          hwndOwner;
HINSTANCE     hInstance;
LPCTSTR       lpstrFilter;
LPTSTR        lpstrCustomFilter;
DWORD         nMaxCustFilter;
DWORD         nFilterIndex;
LPTSTR        lpstrFile;
DWORD         nMaxFile;
LPTSTR        lpstrFileTitle;
DWORD         nMaxFileTitle;
LPCTSTR       lpstrInitialDir;
LPCTSTR       lpstrTitle;
DWORD         Flags;
WORD          nFileOffset;
WORD          nFileExtension;
LPCTSTR       lpstrDefExt;
LPARAM        lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR       lpTemplateName;
#if (_WIN32_WINNT >= 0x0500)
void *        pvReserved;
DWORD         dwReserved;
DWORD         FlagsEx;
#endif // (_WIN32_WINNT >= 0x0500)
} OPENFILENAME, *LPOPENFILENAME;


Members

lStructSize Specifies the length, in bytes, of the structure.
Windows NT 4.0: In an application that is compiled with WINVER and _WIN32_WINNT >= 0x0500, use OPENFILENAME_SIZE_VERSION_400 for this member.

Windows 2000/XP: Use sizeof (OPENFILENAME) for this parameter.

hwndOwner Handle to the window that owns the dialog box. This member can be any valid window handle, or it can be NULL if the dialog box has no owner.hInstance If the OFN_ENABLETEMPLATEHANDLE flag is set in the Flags member,hInstance is a handle to a memory object containing a dialog box template. If the OFN_ENABLETEMPLATE
flag is set,hInstance is a handle to a module that contains a dialog box template named by thelpTemplateName member. If neither flag is set, this member is ignored.
If the OFN_EXPLORER flag is set, the system uses the specified template to create a dialog box that is a child of the default Explorer-style dialog box. If the OFN_EXPLORER flag is not set, the system uses the template to create an old-style dialog box that
replaces the default dialog box.lpstrFilter Pointer to a buffer containing pairs of null-terminated filter strings. The last string in the buffer must be terminated by two NULL characters.
The first string in each pair is a display string that describes the filter (for example, "Text Files"), and the second string specifies the filter pattern (for example, "*.TXT"). To specify multiple filter patterns for a single display string, use a semicolon
to separate the patterns (for example, "*.TXT;*.DOC;*.BAK"). A pattern string can be a combination of valid file name characters and the asterisk (*) wildcard character. Do not include spaces in the pattern string.

The system does not change the order of the filters. It displays them in the
File Types
combo box in the order specified in lpstrFilter.

If lpstrFilter is NULL, the dialog box does not display any filters.

Windows XP: In the case of a shortcut, if no filter is set,
GetOpenFileName
and GetSaveFileName retrieve the name of the .lnk file, not its target. This behavior is the same as setting theOFN_NODEREFERENCELINKS flag in theFlags
member. To retrieve a shortcut's target without filtering, use the string"All Files\0*.*\0\0".

lpstrCustomFilter Pointer to a static buffer that contains a pair of null-terminated filter strings for preserving the filter pattern chosen by the user. The first string is your display string that describes the custom filter, and the second string is the filter pattern
selected by the user. The first time your application creates the dialog box, you specify the first string, which can be any nonempty string. When the user selects a file, the dialog box copies the current filter pattern to the second string. The preserved
filter pattern can be one of the patterns specified in the lpstrFilter buffer, or it can be a filter pattern typed by the user. The system uses the strings to initialize the user-defined file filter the next time
the dialog box is created. If the nFilterIndex member is zero, the dialog box uses the custom filter.
If this member is NULL, the dialog box does not preserve user-defined filter patterns.

If this member is not NULL, the value of the nMaxCustFilter member must specify the size, inTCHARs, of thelpstrCustomFilter buffer. For the ANSI version,
this is the number of bytes; for the Unicode version, this is the number of characters.

nMaxCustFilter Specifies the size, in TCHARs, of the buffer identified by
lpstrCustomFilter
. For the ANSI version, this is the number of bytes; for the Unicode version, this is the number of characters. This buffer should be at least 40 characters long. This member is ignored iflpstrCustomFilter
is NULL or points to a NULL string.nFilterIndex Specifies the index of the currently selected filter in the File Types control. The buffer pointed to bylpstrFilter contains pairs of strings that define the filters. The first pair of strings
has an index value of 1, the second pair 2, and so on. An index of zero indicates the custom filter specified bylpstrCustomFilter. You can specify an index on input to indicate the initial filter description and
filter pattern for the dialog box. When the user selects a file,nFilterIndex returns the index of the currently displayed filter. IfnFilterIndex is zero andlpstrCustomFilter
is NULL, the system uses the first filter in thelpstrFilter buffer. If all three members are zero or NULL, the system does not use any filters and does not show any files in the file list control of the dialog
box.lpstrFile Pointer to a buffer that contains a file name used to initialize the
File Name
edit control. The first character of this buffer must be NULL if initialization is not necessary. When theGetOpenFileName orGetSaveFileName function returns successfully, this buffer contains the drive designator,
path, file name, and extension of the selected file.
If the OFN_ALLOWMULTISELECT flag is set and the user selects multiple files, the buffer contains the current directory followed by the file names of the selected files. For Explorer-style dialog boxes, the directory and file name strings are NULL separated,
with an extra NULL character after the last file name. For old-style dialog boxes, the strings are space separated and the function uses short file names for file names with spaces. You can use the FindFirstFile function to convert between long and short file
names. If the user selects only one file, the lpstrFile string does not have a separator between the path and file name.

If the buffer is too small, the function returns FALSE and the CommDlgExtendedError function returns FNERR_BUFFERTOOSMALL. In this case, the first two bytes of thelpstrFile buffer contain the required size, in
bytes or characters.

nMaxFile Specifies the size, in TCHARs, of the buffer pointed to by
lpstrFile
. For the ANSI version, this is the number of bytes; for the Unicode version, this is the number of characters. The buffer must be large enough to store the path and file name string or strings, including the terminating
NULL character. The GetOpenFileName and GetSaveFileName functions return FALSE if the buffer is too small to contain the file information. The buffer should be at least 256 characters long.lpstrFileTitle Pointer to a buffer that receives the file name and extension (without path information) of the selected file. This member can be NULL.nMaxFileTitle Specifies the size, in TCHARs, of the buffer pointed to by
lpstrFileTitle
. For the ANSI version, this is the number of bytes; for the Unicode version, this is the number of characters. This member is ignored iflpstrFileTitle is NULL.lpstrInitialDir Pointer to a NULL terminated string that can specify the initial directory. The algorithm for selecting the initial directory varies on different platforms.
Windows 2000/XP:

If lpstrFile contains a path, that path is the initial directory.
Otherwise, lpstrInitialDir specifies the initial directory.
Otherwise, if the application has used an Open or Save As dialog box in the past, the path most recently used is selected as the initial directory. However, if an application is not run for a long time, its saved selected
path is discarded.
If lpstrInitialDir is NULL and the current directory contains any files of the specified filter types, the initial directory is the current directory.
Otherwise, the initial directory is the personal files directory of the current user.
Otherwise, the initial directory is the Desktop folder.

Windows 98/Me:

lpstrInitialDir specifies the initial directory.
If lpstrInitialDir is NULL andlpstrFile contains a path, that path is the initial directory.
Otherwise, if the current directory contains any files of the specified filter types, the initial directory is the current directory.
Otherwise, the initial directory is the personal files directory of the current user.

Earlier versions of Windows and Windows NT:

lpstrInitialDir specifies the initial directory.
If lpstrInitialDir is NULL andlpstrFile contains a path, that path is the initial directory.
Otherwise, the initial directory is the current directory.

lpstrTitle Pointer to a string to be placed in the title bar of the dialog box. If this member is NULL, the system uses the default title (that is,Save As orOpen).Flags A set of bit flags you can use to initialize the dialog box. When the dialog box returns, it sets these flags to indicate the user's input. This member can be a combination of the following flags.
OFN_ALLOWMULTISELECT Specifies that the File Name list box allows multiple selections. If you also set the OFN_EXPLORER flag, the dialog box uses the Explorer-style user interface; otherwise, it uses the old-style user interface.
If the user selects more than one file, the lpstrFile buffer returns the path to the current directory followed by the file names of the selected files. ThenFileOffset
member is the offset, in bytes or characters, to the first file name, and thenFileExtension member is not used. For Explorer-style dialog boxes, the directory and file name strings are NULL separated, with an extra
NULL character after the last file name. This format enables the Explorer-style dialog boxes to return long file names that include spaces. For old-style dialog boxes, the directory and file name strings are separated by spaces and the function uses short
file names for file names with spaces. You can use theFindFirstFile function to convert between long and short file names.

If you specify a custom template for an old-style dialog box, the definition of theFile Name list box must contain the LBS_EXTENDEDSEL value.

OFN_CREATEPROMPT If the user specifies a file that does not exist, this flag causes the dialog box to prompt the user for permission to create the file. If the user chooses to create the file, the dialog box closes and the function returns the specified name; otherwise,
the dialog box remains open. If you use this flag with the OFN_ALLOWMULTISELECT flag, the dialog box allows the user to specify only one nonexistent file.OFN_DONTADDTORECENT Windows 2000/XP: Prevents the system from adding a link to the selected file in the file system directory that contains the user's most recently used documents. To retrieve the location of this directory, call the SHGetSpecialFolderLocation
function with the CSIDL_RECENT flag. OFN_ENABLEHOOK Enables the hook function specified in the lpfnHook member.OFN_ENABLEINCLUDENOTIFY Windows 2000/XP: Causes the dialog box to send CDN_INCLUDEITEM notification messages to your OFNHookProc hook procedure when the user opens a folder. The dialog box sends a notification for each item in the newly opened folder. These messages
enable you to control which items the dialog box displays in the folder's item list.OFN_ENABLESIZING Windows 2000/XP, Windows 98/Me: Enables the Explorer-style dialog box to be resized using either the mouse or the keyboard. By default, the Explorer-styleOpen andSave As dialog boxes allow the dialog box
to be resized regardless of whether this flag is set. This flag is necessary only if you provide a hook procedure or custom template. The old-style dialog box does not permit resizing.OFN_ENABLETEMPLATE Indicates that the lpTemplateName member is a pointer to the name of a dialog template resource in the module identified by thehInstance member. If the OFN_EXPLORER flag is set, the system uses the specified template to
create a dialog box that is a child(即打开对话框) of the default Explorer-style dialog box. If the OFN_EXPLORER flag is not set, the system uses the template to create an old-style dialog box that replaces the default dialog box.OFN_ENABLETEMPLATEHANDLE Indicates that the hInstance member identifies a data block that contains a preloaded dialog box template. The system ignoreslpTemplateName if this flag is specified.
If the OFN_EXPLORER flag is set, the system uses the specified template to create a dialog box that is a child of the default Explorer-style dialog box. If the OFN_EXPLORER flag is not set, the system uses the template to create an old-style dialog box that
replaces the default dialog box.OFN_EXPLORER
Indicates that any customizations made to the
Open
or Save As dialog box use the new Explorer-style customization methods. For more information, see Explorer-Style Hook Procedures and Explorer-Style Custom Templates.
By default, the Open and
Save As
dialog boxes use the Explorer-style user interface regardless of whether this flag is set. This flag is necessary only if you provide a hook procedure or custom template, or set the OFN_ALLOWMULTISELECT flag.

If you want the old-style user interface, omit the OFN_EXPLORER flag and provide a replacement old-style template or hook procedure. If you want the old style but do not need a custom template or hook procedure, simply provide
a hook procedure that always returns FALSE.

OFN_EXTENSIONDIFFERENT Specifies that the user typed a file name extension that differs from the extension specified bylpstrDefExt. The function does not use this flag iflpstrDefExt is
NULL. OFN_FILEMUSTEXIST Specifies that the user can type only names of existing files in the
File Name
entry field. If this flag is specified and the user enters an invalid name, the dialog box procedure displays a warning in a message box. If this flag is specified, the OFN_PATHMUSTEXIST flag is also used. This flag can be used in anOpen
dialog box. It cannot be used with a Save As dialog box.OFN_FORCESHOWHIDDEN Windows 2000/XP: Forces the showing of system and hidden files, thus overriding the user setting to show or not show hidden files. However, a file that is marked both system and hidden is not shown.OFN_HIDEREADONLY Hides the Read Only check box. OFN_LONGNAMES For old-style dialog boxes, this flag causes the dialog box to use long file names. If this flag is not specified, or if the OFN_ALLOWMULTISELECT flag is also set, old-style dialog boxes use short file names (8.3 format) for file names with spaces. Explorer-style
dialog boxes ignore this flag and always display long file names. OFN_NOCHANGEDIR Restores the current directory to its original value if the user changed the directory while searching for files.
Windows NT 4.0/2000/XP: This flag is ineffective for
GetOpenFileName
.

OFN_NODEREFERENCELINKS Directs the dialog box to return the path and file name of the selected shortcut (.LNK) file. If this value is not specified, the dialog box returns the path and file name of the file referenced by the shortcut.OFN_NOLONGNAMES For old-style dialog boxes, this flag causes the dialog box to use short file names (8.3 format). Explorer-style dialog boxes ignore this flag and always display long file names.OFN_NONETWORKBUTTON Hides and disables the Network button. OFN_NOREADONLYRETURN Specifies that the returned file does not have the Read Only check box selected and is not in a write-protected directory.OFN_NOTESTFILECREATE Specifies that the file is not created before the dialog box is closed. This flag should be specified if the application saves the file on a create-nonmodify network share. When an application specifies this flag, the library does not check for write protection,
a full disk, an open drive door, or network protection. Applications using this flag must perform file operations carefully, because a file cannot be reopened once it is closed.OFN_NOVALIDATE Specifies that the common dialog boxes allow invalid characters in the returned file name. Typically, the calling application uses a hook procedure that checks the file name by using the FILEOKSTRING message. If the text box in the edit control is empty
or contains nothing but spaces, the lists of files and directories are updated. If the text box in the edit control contains anything else,nFileOffset andnFileExtension are
set to values generated by parsing the text. No default extension is added to the text, nor is text copied to the buffer specified bylpstrFileTitle. If the value specified bynFileOffset
is less than zero, the file name is invalid. Otherwise, the file name is valid, andnFileExtension andnFileOffset can be used as if the OFN_NOVALIDATE flag had not been specified.OFN_OVERWRITEPROMPT Causes the Save As dialog box to generate a message box if the selected file already exists. The user must confirm whether to overwrite the file.OFN_PATHMUSTEXIST Specifies that the user can type only valid paths and file names. If this flag is used and the user types an invalid path and file name in theFile Name entry field, the dialog box function displays a warning in a message box.OFN_READONLY Causes the Read Only check box to be selected initially when the dialog box is created. This flag indicates the state of theRead Only check box when the dialog box is closed.OFN_SHAREAWARE Specifies that if a call to the OpenFile function fails because of a network sharing violation, the error is ignored and the dialog box returns the selected file name. If this flag is not set, the dialog box notifies your hook procedure when a network sharing
violation occurs for the file name specified by the user. If you set the OFN_EXPLORER flag, the dialog box sends the CDN_SHAREVIOLATION message to the hook procedure. If you do not set OFN_EXPLORER, the dialog box sends the SHAREVISTRING registered message
to the hook procedure. OFN_SHOWHELP Causes the dialog box to display the Help button. The
hwndOwner
member must specify the window to receive the HELPMSGSTRING registered messages that the dialog box sends when the user clicks theHelp button. An Explorer-style dialog box sends a CDN_HELP notification
message to your hook procedure when the user clicks theHelp button.OFN_USESHELLITEM Do not use.

nFileOffset Specifies the zero-based offset, in TCHARs, from the beginning of the path to the file name in the string pointed to bylpstrFile. For the ANSI version, this is the number of bytes; for the Unicode
version, this is the number of characters. For example, iflpstrFile points to the following string, "c:\dir1\dir2\file.ext", this member contains the value 13 to indicate the offset of the "file.ext" string. If
the user selects more than one file,nFileOffset is the offset to the first file name.nFileExtension Specifies the zero-based offset, in TCHARs, from the beginning of the path to the file name extension in the string pointed to bylpstrFile. For the ANSI version, this is the number of bytes;
for the Unicode version, this is the number of characters. For example, iflpstrFile points to the following string, "c:\dir1\dir2\file.ext", this member contains the value 18. If the user did not type an extension
andlpstrDefExt is NULL, this member specifies an offset to the terminating NULL character. If the user typed "." as the last character in the file name, this member specifies zero.lpstrDefExt Pointer to a buffer that contains the default extension. GetOpenFileName andGetSaveFileName append this extension to the file name if the user fails to type an extension. This string can be any length, but only the first
three characters are appended. The string should not contain a period (.). If this member is NULL and the user fails to type an extension, no extension is appended.lCustData Specifies application-defined data that the system passes to the hook procedure identified by thelpfnHook member. When the system sends the WM_INITDIALOG message to the hook procedure, the message'slParam
parameter is a pointer to the OPENFILENAME structure specified when the dialog box was created. The hook procedure can use this pointer to get thelCustData value.lpfnHook Pointer to a hook procedure. This member is ignored unless the Flags member includes the OFN_ENABLEHOOK flag.
If the OFN_EXPLORER flag is not set in the Flags member,lpfnHook is a pointer to an OFNHookProcOldStyle hook procedure that receives messages intended for the
dialog box. The hook procedure returns FALSE to pass a message to the default dialog box procedure or TRUE to discard the message.

If OFN_EXPLORER is set, lpfnHook is a pointer to anOFNHookProc hook procedure. The hook procedure receives notification messages sent from the dialog box. The hook procedure also receives
messages for any additional controls that you defined by specifying a child dialog template. The hook procedure does not receive messages intended for the standard controls of the default dialog box.

lpTemplateName Pointer to a null-terminated string that names a dialog template resource in the module identified by thehInstance member. For numbered dialog box resources, this can be a value returned by the MAKEINTRESOURCE
macro. This member is ignored unless the OFN_ENABLETEMPLATE flag is set in theFlags member. If the OFN_EXPLORER flag is set, the system uses the specified template to create a dialog box that is a child of the default
Explorer-style dialog box. If the OFN_EXPLORER flag is not set, the system uses the template to create an old-style dialog box that replaces the default dialog box.pvReserved Reserved. Must be set to NULL. dwReserved Reserved. Must be set to 0. FlagsEx Windows 2000/XP: A set of bit flags you can use to initialize the dialog box. Currently, this member can be zero or the following flag.
OFN_EX_NOPLACESBAR If this flag is set, the places bar is not displayed. If this flag is not set, Explorer-style dialog boxes include a places bar containing icons for commonly-used folders, such as Favorites and Desktop.

Remarks

For compatibility reasons, the Places Bar is hidden if Flags is set to OFN_ENABLEHOOK andlStructSize is OPENFILENAME_SIZE_VERSION_400.

Structure Information

HeaderDeclared in Commdlg.h, include
Windows.h
Minimum operating systemsWindows 95, Windows NT 3.1
UnicodeImplemented as ANSI and Unicode versions.

Opening a File

This topic describes sample code that displays an Open dialog box so a user can specify the drive, directory, and name of a file to open. The sample code first initializes an OPENFILENAME structure, and then calls the GetOpenFileName function
to display the dialog box.

In this example, the lpstrFilter member is a pointer to a buffer that specifies two file name filters that the user can select to limit the file names that are displayed. The buffer contains a double-null terminated array of strings in which
each pair of strings specifies a filter. The nFilterIndex member specifies that the first pattern is used when the dialog box is created.

This example sets the OFN_PATHMUSTEXIST and OFN_FILEMUSTEXIST flags in the
Flags
member. These flags cause the dialog box to verify, before returning, that the path and file name specified by the user actually exist.

The GetOpenFileName function returns TRUE if the user clicks theOK button and the specified path and file name exist. In this case, the buffer pointed to by thelpstrFile member contains the path and file
name. The sample code uses this information in a call to the function to open the file.

Although this example does not set the OFN_EXPLORER flag, it still displays the default Explorer-styleOpen dialog box. However, if you want to provide a hook procedure or a custom template and you want the Explorer user interface, you must
set the OFN_EXPLORER flag. Note, in the C programming language, a string enclosed in double quotes is null-terminated.

Hide Example
OPENFILENAME ofn;       // common dialog box structure
char szFile[260];       // buffer for file name
HWND hwnd;              // owner window
HANDLE hf;              // file handle

// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
//
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not
// use the contents of szFile to initialize itself.
//
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Display the Open dialog box.

if (GetOpenFileName(&ofn)==TRUE)
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐