OPENFILENAME结构包含GetOpenFileName和GetSaveFileName函数用于初始化“打开”或“另存为”常用对话框的信息。用户关闭对话框后,系统会在此结构中返回有关用户选择的信息。
typedef struct tagOFN { //恐惧cy
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;
DWORD lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} OPENFILENAME;
会员
lStructSize
指定结构的长度(以字节为单位)。
hwndOwner
标识拥有该对话框的窗口。该成员可以是任何有效的窗口句柄,如果对话框没有所有者,它可以为NULL。
的hInstance
如果在旗成员中设置了OFN_ENABLETEMPLATEHANDLE标志,则的hInstance是包含对话框模板的内存对象的句柄。如果设置了OFN_ENABLETEMPLATE标志,的hInstance标识包含由lpTemplateName成员命名的对话框模板的模块。如果没有设置任何标志,则该成员将被忽略。
如果设置了OFN_EXPLORER标志,系统将使用指定的模板创建一个对话框,该对话框是默认资源管理器样式对话框的子项。如果未设置OFN_EXPLORER标志,系统将使用该模板创建一个替换默认对话框的旧式对话框。
lpstrFilter
指向包含空端接的过滤器字符串对的缓冲区。缓冲区中的最后一个字符串必须由两个NULL字符终止。
每对中的第一个字符串是描述过滤器(例如“文本文件”)的显示字符串,第二个字符串指定过滤器模式(例如“* .TXT”)。要为单个显示字符串指定多个过滤器模式,请使用分号分隔模式(例如,“* .TXT; *。DOC; *。BAK”)。模式字符串可以是有效的文件名字符和星号(*)通配符的组合。不要在模式字符串中包含空格。
操作系统不会更改过滤器的顺序。它将按照lpstrFilter中指定的顺序在“文件类型”组合框中显示。
如果lpstrFilter为NULL,对话框不显示任何过滤器。
lpstrCustomFilter
指向静态缓冲区的指针,该静态缓冲区包含一对以空值终止的过滤器字符串,用于保留用户选择的过滤器模式。第一个字符串是描述自定义过滤器的显示字符串,第二个字符串是用户选择的过滤器模式。您的应用程序首次创建对话框时,您可以指定第一个字符串,它可以是任何非空字符串。当用户选择文件时,该对话框将将当前过滤器模式复制到第二个字符串。保留的过滤器模式可以是lpstrFilter缓冲区中指定的模式之一,也可以是用户输入的过滤器模式。系统在下次创建对话框时使用字符串初始化用户定义的文件过滤器。如果nFilterIndex成员为零,对话框将使用自定义过滤器。
如果此成员为NULL,对话框不会保留用户定义的过滤器模式。
如果此成员不为NULL,则nMaxCustFilter成员的值必须指定lpstrCustomFilter缓冲区的大小(以字节为单位)(ANSI版本)或字符(Unicode版本)。
nMaxCustFilter
指定由lpstrCustomFilter标识的缓冲区的大小(以字节或字符为单位)。此缓冲区应至少为40个字符。如果lpstrCustomFilter为NULL或指向空字符串,则忽略此成员。
nFilterIndex
指定文件类型控件中当前选定过滤器的索引。lpstrFilter指向的缓冲区包含定义过滤器的字符串对。第一对字符串的索引值为1,第二对2等。索引为零表示由lpstrCustomFilter指定的自定义过滤器。您可以在输入上指定索引,以指示对话框的初始过滤器描述和过滤器模式。当用户选择文件时,nFilterIndex返回当前显示的过滤器的索引。
如果nFilterIndex为零且lpstrCustomFilter为NULL,系统将使用lpstrFilter缓冲区中的第一个过滤器。如果所有三个成员都为零或NULL,则系统不使用任何过滤器,并且不会在对话框的文件列表控件中显示任何文件。
lpstrFile
指向包含用于初始化文件名??编辑控件的文件名的缓冲区。如果不需要初始化,此缓冲区的第一个字符必须为NULL。当GetOpenFileName或GetSaveFileName函数成功返回时,此缓冲区包含所选文件的驱动器指示符,路径,文件名和扩展名。
如果设置了OFN_ALLOWMULTISELECT标志,并且用户选择了多个文件,缓冲区将包含当前目录,后跟所选文件的文件名。对于资源管理器样式的对话框,目录和文件名字符串为NULL分隔,最后一个文件名之后为空字符。对于旧样式的对话框,字符串是空格分隔的,该函数使用空格的文件名的短文件名。您可以使用FindFirstFile函数在长和短文件名之间进行转换。
如果缓冲区太小,则该函数返回FALSE,CommDlgExtendedError函数返回FNERR_BUFFERTOOSMALL。在这种情况下,lpstrFile缓冲区的前两个字节包含所需的大小(以字节或字符为单位)。
nMaxFile
指定由lpstrFile指向的缓冲区的大小(以字节为单位)(ANSI版本)或字符(Unicode版本)。如果缓冲区太小,不能包含文件信息,GetOpenFileName和GetSaveFileName函数返回FALSE。缓冲区应至少256个字符。
lpstrFileTitle
指向接收所选文件的文件名和扩展名(没有路径信息)的缓冲区。该成员可以为NULL。
nMaxFileTitle
指定lpstrFileTitle指向的缓冲区的大小(以字节为单位)(ANSI版本)或字符(Unicode版本)。如果lpstrFileTitle为NULL,则忽略此成员。
lpstrInitialDir
指向指定初始文件目录的字符串的指针。如果该成员为NULL,系统将使用当前目录作为初始目录。
lpstrTitle
指向要放置在对话框标题栏中的字符串。如果该成员为NULL,系统将使用默认标题(即“另存为”或“打开”)。
旗
您可以使用一组位标记来初始化对话框。当对话框返回时,它设置这些标志以指示用户的输入。该成员可以是以下标志的组合:
旗 | 含义 | ||||
OFN_ALLOWMULTISELECT | |||||
指定“文件名”列表框允许多个选择。如果您还设置了OFN_EXPLORER标志,对话框将使用Explorer风格的用户界面;否则,它使用旧式用户界面。 如果用户选择多个文件,则lpstrFile缓冲区将返回当前目录的路径,然后返回所选文件的文件名。nFileOffset成员是第一个文件名的偏移量,不使用nFileExtension成员。对于资源管理器样式的对话框,目录和文件名字符串为NULL分隔,最后一个文件名之后为空字符。这种格式使资源管理器样式的对话框返回包含空格的长文件名。对于旧式对话框,目录和文件名字符串由空格分隔,该函数对具有空格的文件名使用短文件名。您可以使用FindFirstFile函数在长文件名和短文件名之间进行转换。 如果为旧式对话框指定自定义模板,则“文件名”列表框的定义必须包含LBS_EXTENDEDSEL值。 | |||||
OFN_CREATEPROMPT | |||||
如果用户指定不存在的文件,则此标志使对话框提示用户创建文件的权限。如果用户选择创建文件,对话框关闭,函数返回指定的名称;否则,对话框保持打开状态。 | |||||
OFN_ENABLEHOOK | |||||
启用lpfnHook成员中指定的挂钩功能。 | |||||
OFN_ENABLETEMPLATE | |||||
表示lpTemplateName成员指向由的hInstance成员标识的模块中的对话框模板资源的名称。 如果设置了OFN_EXPLORER标志,系统将使用指定的模板创建一个对话框,该对话框是默认资源管理器样式对话框的子项。如果未设置OFN_EXPLORER标志,系统将使用该模板创建一个替换默认对话框的旧式对话框。 | |||||
OFN_ENABLETEMPLATEHANDLE | |||||
表示的hInstance成员标识包含预加载对话框模板的数据块。如果指定了此标志,系统将忽略lpTemplateName 如果设置了OFN_EXPLORER标志,系统将使用指定的模板创建一个对话框,该对话框是默认资源管理器样式对话框的子项。如果未设置OFN_EXPLORER标志,系统将使用该模板创建一个替换默认对话框的旧式对话框。 | |||||
OFN_EXPLORER | |||||
表示对“打开”或“另存为”对话框进行的任何自定义都使用新的“资源管理器”样式的自定义方法。有关详细信息,请参阅通用对话框库概述中的“资源管理器钩子程序”和“Explorer风格的自定义模板”部分。 默认情况下,打开和另存为对话框使用资源管理器式用户界面,而不管此标志是否设置。只有提供一个挂钩过程或自定义模板,或者设置OFN_ALLOWMULTISELECT标志,这个标志才是必需的。 如果您想要旧式用户界面,请省略OFN_EXPLORER标志,并提供替换旧样式的模板或挂钩过程。如果您想要旧样式,但不需要自定义模板或钩子过程,只需提供始终返回FALSE的钩子过程。 | |||||
OFN_EXTENSIONDIFFERENT | |||||
指定用户键入与lpstrDefExt指定的扩展名不同的文件扩展名。如果lpstrDefExt为NULL,则该函数不使用此标志。 | |||||
OFN_FILEMUSTEXIST | |||||
指定用户只能在文件名输入字段中键入现有文件的名称。如果指定了此标志,并且用户输入无效的名称,对话框过程将在消息框中显示警告。如果指定了该标志,则也使用OFN_PATHMUSTEXIST标志。 | |||||
OFN_HIDEREADONLY | |||||
隐藏只读复选框。 | |||||
OFN_LONGNAMES | |||||
对于旧样式对话框,此标志使对话框使用长文件名。如果未指定此标志,或者如果还设置了OFN_ALLOWMULTISELECT标志,则旧式对话框对于具有空格的文件名使用短文件名(8.3格式)。 资源管理器样式对话框忽略此标志,并始终显示长文件名。 | |||||
OFN_NOCHANGEDIR | |||||
如果用户在搜索文件时更改了目录,则将当前目录恢复为原始值。 | |||||
OFN_NODEREFERENCELINKS | |||||
指示对话框返回所选快捷方式(.LNK)文件的路径和文件名。如果没有给出该值,对话框将返回快捷方式文件【参考】的路径和文件名 | |||||
OFN_NOLONGNAMES | |||||
对于旧式对话框,此标志使该对话框使用短文件名(8.3格式)。 资源管理器样式对话框忽略此标志,并始终显示长文件名。 | |||||
OFN_NONETWORKBUTTON | |||||
隐藏并禁用网络按钮。 | |||||
OFN_NOREADONLYRETURN | |||||
指定返回的文件没有选中只读复选框,并且不在写保护目录中。 | |||||
OFN_NOTESTFILECREATE | |||||
指定在关闭对话框之前未创建该文件。如果应用程序将文件保存在create-nonmodify网络共享点上,则应指定此标志。当应用程序指定此标志时,库不会检查写保护,完整磁盘,打开的驱动器门或网络保护。使用此标志的应用程序必须仔细执行文件操作,因为文件关闭后无法重新打开。 | |||||
OFN_NOVALIDATE | |||||
指定公共对话框允许返回的文件名中的无效字符。通常,调用应用程序使用钩子过程,通过使用FILEOKSTRING消息来检查文件名。如果编辑控件中的文本框为空,或仅包含空格,则会更新文件和目录列表。如果编辑控件中的文本框包含任何其他内容,则nFileOffset和nFileExtension将设置为通过解析文本生成的值。没有默认的扩展名添加到文本中,也不会将文本复制到lpstrFileTitle指定的缓冲区中。 | |||||
如果nFileOffset指定的值小于零,则文件名无效。否则,文件名有效,可以使用nFileExtension??和nFileOffset,因为没有指定OFN_NOVALIDATE标志。 | |||||
OFN_OVERWRITEPROMPT | |||||
如果所选文件已存在,则导致“另存为”对话框生成一个消息框。用户必须确认是否覆盖该文件。 | |||||
OFN_PATHMUSTEXIST | |||||
指定用户只能键入有效的路径和文件名。如果使用此标志,并且用户在“文件名”条目字段中键入无效的路径和文件名,则对话框功能将在消息框中显示警告。 | |||||
OFN_READONLY | |||||
创建对话框时,请先检查“只读”复选框。当对话框关闭时,此标志指示“只读”复选框的状态。 | |||||
OFN_SHAREAWARE | |||||
指定如果由于网络共享违规而对OpenFile功能的调用失败,则会忽略此错误,对话框将返回所选的文件名。 如果未设置此标志,则当由用户指定的文件名发生网络共享冲突时,对话框通知您的挂钩过程。如果设置了OFN_EXPLORER标志,对话框将发送CDN_SHAREVIOLATION消息给挂钩过程。如果不设置OFN_EXPLORER,对话框将发送SHAREVISTRING注册消息给挂钩过程。 | |||||
OFN_SHOWHELP | |||||
导致对话框显示帮助按钮。hwndOwner成员必须指定窗口以接收当用户单击帮助按钮时对话框发送的HELPMSGSTRING注册消息。 当用户单击帮助按钮时,资源管理器样式的对话框将向您的挂钩过程发送CDN_HELP通知消息。 |
nFileOffset
指定从lpstrFile指向的字符串中的路径开头到文件名的从零开始的偏移量。例如,如果lpstrFile指向以下字符串“c:\\ dir1 \\ dir2 \\ file.ext”,则此成员包含值13以指示“file.ext”字符串的偏移量。
nFileExtension
指定从lpstrFile指向的字符串中的路径开始到文件扩展名的从零开始的偏移量。例如,如果lpstrFile指向以下字符串“c:\\ dir1 \\ dir2 \\ file.ext”,则此成员包含值18。如果用户没有键入扩展名,并且lpstrDefExt为NULL,则该成员为终止空字符指定偏移量。如果用户键入“”。作为文件名中的最后一个字符,该成员指定为零。
lpstrDefExt
指向包含默认扩展名的缓冲区。GetOpenFileName和GetSaveFileName如果用户无法键入扩展名,则将此扩展名附加到文件名。此字符串可以是任意长度,但只能附加前三个字符。字符串不应包含句点(。)。如果此成员为NULL,并且用户无法键入扩展名,则不会追加扩展名。
lCustData
指定系统传递给由lpfnHook成员标识的挂接过程的应用程序定义的数据。当系统向挂接过程发送WM_INITDIALOG消息时,消息的【lParam的】参数是指向创建对话框时指定的OPENFILENAME结构的指针。挂钩过程可以使用此指针获取lCustData值。
lpfnHook
指针钩子程序。除非旗成员包含OFN_ENABLEHOOK标志,否则该成员将被忽略。
如果旗成员中没有设置OFN_EXPLORER标志,lpfnHook是指向OFNHookProcOldStyle挂接过程的指针,该过程接收到对话框的消息。挂钩过程返回FALSE以将消息传递到默认对话框过程或TRUE以放弃消息。
如果OFN_EXPLORER被设置,lpfnHook是一个指向OFNHookProc钩子过程的指针。挂钩过程接收从对话框发送的通知消息。挂钩过程还会接收通过指定子对话框模板定义的任何其他控件的消息。挂接过程不接收默认对话框的标准控件的消息。
lpTemplateName
指向由的hInstance成员标识的模块中指定对话框模板资源的以null结尾的字符串。对于编号对话框资源,这可以是MAKEINTRESOURCE宏返回的值。除非在旗成员中设置了OFN_ENABLETEMPLATE标志,否则此成员将被忽略。
如果设置了OFN_EXPLORER标志,系统将使用指定的模板创建一个对话框,该对话框是默认资源管理器样式对话框的子项。如果未设置OFN_EXPLORER标志,系统将使用该模板创建一个替换默认对话框的旧式对话框。
也可以看看