Структура OPENFILENAMEA (commdlg.h)
[Начиная с Windows Vista, общие диалоговые окна "Открыть" и "Сохранить как" заменены диалоговым окном "Общий элемент". Мы рекомендуем использовать API общих диалоговых окон вместо этих диалоговых окон из библиотеки общих диалоговых окон.]
Содержит сведения, используемые функциями GetOpenFileName и GetSaveFileName для инициализации диалогового окна "Открыть" или "Сохранить как ". После того как пользователь закроет диалоговое окно, система возвращает сведения о выборе пользователя в этой структуре.
Синтаксис
typedef struct tagOFNA {
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCSTR lpstrFilter;
LPSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPSTR lpstrFile;
DWORD nMaxFile;
LPSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCSTR lpstrInitialDir;
LPCSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCSTR lpstrDefExt;
LPARAM lCustData;
LPOFNHOOKPROC lpfnHook;
LPCSTR lpTemplateName;
LPEDITMENU lpEditInfo;
LPCSTR lpstrPrompt;
void *pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
} OPENFILENAMEA, *LPOPENFILENAMEA;
Члены
lStructSize
Тип: DWORD
Длина структуры в байтах.
Используйте sizeof (OPENFILENAME)
для этого параметра.
hwndOwner
Тип: HWND
Дескриптор окна, которому принадлежит диалоговое окно. Это может быть любой допустимый дескриптор окна или значение NULL , если у диалогового окна нет владельца.
hInstance
Тип: HINSTANCE
Если флаг OFN_ENABLETEMPLATEHANDLE задан в элементе Flags , hInstance — это дескриптор объекта памяти, содержащего шаблон диалогового окна. Если установлен флаг OFN_ENABLETEMPLATE , hInstance — это дескриптор модуля, который содержит шаблон диалогового окна с именем члена lpTemplateName . Если ни один из флагов не задан, этот элемент игнорируется. Если установлен флаг OFN_EXPLORER, система использует указанный шаблон для создания диалогового окна, которое является дочерним по отношению к диалоговому окку Обозреватель по умолчанию. Если флаг OFN_EXPLORER не задан, система использует шаблон для создания диалогового окна старого стиля, заменяющего диалоговое окно по умолчанию.
lpstrFilter
Тип: LPCTSTR
Буфер, содержащий пары строк фильтра, завершаемых значением NULL. Последняя строка в буфере должна заканчиваться двумя символами NULL .
Первая строка в каждой паре является отображаемой строкой, описывающей фильтр (например, "Текстовые файлы"), а вторая строка задает шаблон фильтра (например, ".TXT"
). Чтобы указать несколько шаблонов фильтров для одной отображаемой строки, используйте точку с запятой для разделения шаблонов (например, "
.TXT;.DOC;. BAK"
). Строка шаблона может быть сочетанием допустимых символов имени файла и подстановочного знака звездочки (*). Не включайте пробелы в строку шаблона.
Система не изменяет порядок фильтров. Они отображаются в поле со списком Типы файлов в порядке, указанном в lpstrFilter.
Если lpstrFilter имеет значение NULL, в диалоговом окне не отображаются фильтры.
В случае ярлыка, если фильтр не задан, GetOpenFileName и GetSaveFileName извлекают имя LNK-файла, а не его целевой объект. Это поведение аналогично установке флага OFN_NODEREFERENCELINKS в элементе Flags . Чтобы получить целевой объект ярлыка без фильтрации, используйте строку "All Files\0*.*\0\0"
.
lpstrCustomFilter
Тип: LPTSTR
Статический буфер, содержащий пару строк фильтра, завершаемых значением NULL, для сохранения шаблона фильтра, выбранного пользователем. Первая строка — это отображаемая строка, описывающая пользовательский фильтр, а вторая строка — шаблон фильтра, выбранный пользователем. При первом создании диалогового окна приложением указывается первая строка, которая может быть любой непустой строкой. Когда пользователь выбирает файл, диалоговое окно копирует текущий шаблон фильтра во вторую строку. Сохраненный шаблон фильтра может быть одним из шаблонов, указанных в буфере lpstrFilter , или шаблоном фильтра, введенным пользователем. Система использует строки для инициализации пользовательского фильтра файлов при следующем создании диалогового окна. Если элемент nFilterIndex равен нулю, диалоговое окно использует настраиваемый фильтр.
Если этот элемент имеет значение NULL, диалоговое окно не сохраняет пользовательские шаблоны фильтров.
Если этот элемент не равен NULL, значение элемента nMaxCustFilter должно указывать размер буфера lpstrCustomFilter в символах.
nMaxCustFilter
Тип: DWORD
Размер (в символах) буфера, определяемого lpstrCustomFilter. Длина этого буфера должна составлять не менее 40 символов. Этот элемент игнорируется, если lpstrCustomFilter имеет значение NULL или указывает на строку NULL .
nFilterIndex
Тип: DWORD
Индекс текущего выбранного фильтра в элементе управления Типы файлов . Буфер, на который указывает lpstrFilter , содержит пары строк, определяющих фильтры. Первая пара строк имеет значение индекса 1, вторая пара 2 и т. д. Нулевой индекс указывает на пользовательский фильтр, заданный lpstrCustomFilter. Можно указать индекс для входных данных, чтобы указать начальное описание фильтра и шаблон фильтра для диалогового окна. Когда пользователь выбирает файл, nFilterIndex возвращает индекс текущего отображаемого фильтра. Если nFilterIndex равно нулю, а lpstrCustomFilter имеет значение NULL, система использует первый фильтр в буфере lpstrFilter . Если все три элемента равны нулю или NULL, система не использует фильтры и не отображает файлы в элементе управления "Список файлов" диалогового окна.
lpstrFile
Тип: LPTSTR
Имя файла, используемое для инициализации элемента управления изменением имени файла . Если инициализация не требуется, первый символ этого буфера должен иметь значение NULL . При успешном возврате функции GetOpenFileName или GetSaveFileName этот буфер содержит конструктор диска, путь, имя файла и расширение выбранного файла.
Если установлен флаг OFN_ALLOWMULTISELECT и пользователь выбирает несколько файлов, буфер содержит текущий каталог, за которым следуют имена выбранных файлов. Для диалоговых окон в стиле Обозреватель строки каталога и имени файла разделяются значением NULL, а после последнего имени файла — дополнительным символом NULL. Для диалоговых окон старого стиля строки разделены пробелами, а функция использует короткие имена файлов для имен файлов с пробелами. Для преобразования длинных и коротких имен файлов можно использовать функцию FindFirstFile . Если пользователь выбирает только один файл, строка lpstrFile не имеет разделителя между путем и именем файла.
Если буфер слишком мал, функция возвращает значение FALSE , а функция CommDlgExtendedError возвращает FNERR_BUFFERTOOSMALL. В этом случае первые два байта буфера lpstrFile содержат необходимый размер в байтах или символах.
nMaxFile
Тип: DWORD
Размер (в символах) буфера, на который указывает lpstrFile. Буфер должен быть достаточно большим для хранения строки пути и имени файла или строк, включая завершающий символ NULL . Функции GetOpenFileName и GetSaveFileName возвращают значение FALSE , если буфер слишком мал для хранения сведений о файле. Буфер должен содержать не менее 256 символов.
lpstrFileTitle
Тип: LPTSTR
Имя и расширение выбранного файла (без сведений о пути). Этот элемент может иметь значение NULL.
nMaxFileTitle
Тип: DWORD
Размер (в символах) буфера, на который указывает lpstrFileTitle. Этот элемент игнорируется, если lpstrFileTitle имеет значение NULL.
lpstrInitialDir
Тип: LPCTSTR
Исходный каталог. Алгоритм выбора начального каталога зависит от разных платформ.
Windows 7:
- Если значение lpstrInitialDir совпадает с значением, переданным при первом использовании приложением диалогового окна Открыть или Сохранить как , в качестве начального каталога используется путь, недавно выбранный пользователем.
- В противном случае, если lpstrFile содержит путь, этот путь является начальным каталогом.
- В противном случае, если lpstrInitialDir не равно NULL, он указывает исходный каталог.
- Если lpstrInitialDir имеет значение NULL и текущий каталог содержит файлы указанных типов фильтров, начальным каталогом будет текущий каталог.
- В противном случае начальным каталогом будет каталог личных файлов текущего пользователя.
- В противном случае начальным каталогом будет папка "Рабочий стол".
- Если lpstrFile содержит путь, он является начальным каталогом.
- В противном случае lpstrInitialDir указывает исходный каталог.
- В противном случае, если приложение ранее использовало диалоговое окно Открыть или Сохранить как , в качестве начального каталога выбирается последний использованный путь. Однако если приложение не запускается в течение длительного времени, сохраненный выбранный путь удаляется.
- Если lpstrInitialDir имеет значение NULL и текущий каталог содержит файлы указанных типов фильтров, начальным каталогом будет текущий каталог.
- В противном случае начальным каталогом будет каталог личных файлов текущего пользователя.
- В противном случае начальным каталогом будет папка "Рабочий стол".
lpstrTitle
Тип: LPCTSTR
Строка, помещаемая в заголовок диалогового окна. Если этот элемент имеет значение NULL, система использует заголовок по умолчанию (то есть сохранить как или открыть).
Flags
Тип: DWORD
Набор битовых флагов, который можно использовать для инициализации диалогового окна. Когда диалоговое окно возвращается, оно устанавливает эти флаги для указания входных данных пользователя. Этот элемент может быть сочетанием следующих флагов.
Значение | Значение |
---|---|
|
В списке Имя файла можно выбрать несколько вариантов. Если также задан флаг OFN_EXPLORER, в диалоговом окне используется пользовательский интерфейс в стиле Обозреватель, в противном случае используется пользовательский интерфейс старого стиля.
Если пользователь выбирает несколько файлов, буфер lpstrFile возвращает путь к текущему каталогу, за которым следуют имена выбранных файлов. Элемент nFileOffset — это смещение (в байтах или символах) к имени первого файла, а член nFileExtension не используется. Для диалоговых окон в Обозреватель стиле строки каталога и имени файла разделяются null и имеют дополнительный символ NULL после последнего имени файла. Этот формат позволяет диалоговым окнам в стиле Обозреватель возвращать длинные имена файлов, включающие пробелы. В диалоговых окнах старого стиля строки каталога и имени файла разделяются пробелами, а функция использует короткие имена файлов для имен файлов с пробелами. Для преобразования длинных и коротких имен файлов можно использовать функцию FindFirstFile . Если вы указываете настраиваемый шаблон для диалогового окна старого стиля, определение списка Имя файла должно содержать значение LBS_EXTENDEDSEL . |
|
Если пользователь указывает файл, который не существует, этот флаг приводит к тому, что диалоговое окно запрашивает у пользователя разрешение на создание файла. Если пользователь решит создать файл, диалоговое окно закрывается и функция возвращает указанное имя; В противном случае диалоговое окно остается открытым. Если этот флаг используется вместе с флагом OFN_ALLOWMULTISELECT , диалоговое окно позволяет пользователю указать только один несуществующий файл. |
|
Запрещает системе добавлять ссылку на выбранный файл в каталог файловой системы, содержащий последние использовавшиеся документы пользователя. Чтобы получить расположение этого каталога, вызовите функцию SHGetSpecialFolderLocation с флагом CSIDL_RECENT . |
|
Включает функцию перехватчика, указанную в элементе lpfnHook . |
|
Заставляет диалоговое окно отправлять CDN_INCLUDEITEM уведомления в процедуру обработчика OFNHookProc , когда пользователь открывает папку. Диалоговое окно отправляет уведомление для каждого элемента в открывшейся папке. Эти сообщения позволяют управлять элементами, отображаемыми в диалоговом окне в списке элементов папки. |
|
Позволяет изменять размер диалогового окна в стиле Обозреватель с помощью мыши или клавиатуры. По умолчанию диалоговые окна Открыть и Сохранить как в стиле Обозреватель позволяют изменять размер диалогового окна независимо от того, установлен ли этот флаг. Этот флаг необходим, только если вы предоставляете процедуру перехватчика или пользовательский шаблон. Диалоговое окно старого стиля не допускает изменения размера. |
|
Элемент lpTemplateName является указателем на имя ресурса шаблона диалогового окна в модуле, определяемом элементом hInstance . Если установлен флаг OFN_EXPLORER, система использует указанный шаблон для создания диалогового окна, которое является дочерним для диалогового окна Обозреватель стиле по умолчанию. Если флаг OFN_EXPLORER не установлен, система использует шаблон для создания диалогового окна старого стиля, заменяющего диалоговое окно по умолчанию. |
|
Элемент hInstance определяет блок данных, содержащий предварительно загруженный шаблон диалогового окна. Система игнорирует lpTemplateName , если указан этот флаг. Если установлен флаг OFN_EXPLORER, система использует указанный шаблон для создания диалогового окна, которое является дочерним для диалогового окна Обозреватель стиле по умолчанию. Если флаг OFN_EXPLORER не установлен, система использует шаблон для создания диалогового окна старого стиля, заменяющего диалоговое окно по умолчанию. |
|
Указывает, что все настройки, внесенные в диалоговое окно Открыть или Сохранить как, используют методы настройки Обозреватель стиле. Дополнительные сведения см. в разделах Обозреватель-Style Hook Procedures and Обозреватель Custom Templates.
По умолчанию диалоговые окна Открыть и Сохранить как используют пользовательский интерфейс Обозреватель независимо от того, установлен ли этот флаг. Этот флаг необходим, только если вы предоставляете процедуру перехватчика или пользовательский шаблон или задаете флаг OFN_ALLOWMULTISELECT . Если вам нужен пользовательский интерфейс старого стиля, опустите флаг OFN_EXPLORER и предоставьте на замену старый шаблон или процедуру перехватчика. Если вам нужен старый стиль, но вам не нужен настраиваемый шаблон или процедура перехватчика, просто предоставьте процедуру перехватчика, которая всегда возвращает значение FALSE. |
|
Пользователь ввел расширение имени файла, отличное от расширения, указанного в lpstrDefExt. Функция не использует этот флаг, если lpstrDefExt имеет значение NULL. |
|
Пользователь может вводить только имена существующих файлов в поле записи Имя файла . Если этот флаг указан и пользователь вводит недопустимое имя, процедура диалогового окна отображает предупреждение в окне сообщения. Если этот флаг указан, также используется флаг OFN_PATHMUSTEXIST . Этот флаг можно использовать в диалоговом окне Открыть . Его нельзя использовать с диалоговым окном "Сохранить как ". |
|
Принудительное отображение системных и скрытых файлов, тем самым переопределяя параметр пользователя для отображения или не отображения скрытых файлов. Однако файл, помеченный как системным, так и скрытым, не отображается. |
|
Скрывает поле Только для чтения проверка. |
|
Для диалоговых окон старого стиля этот флаг приводит к тому, что в диалоговом окне используются длинные имена файлов. Если этот флаг не указан или флаг OFN_ALLOWMULTISELECT также установлен, диалоговые окна старого стиля используют короткие имена файлов (формат 8.3) для имен файлов с пробелами. Обозреватель диалоговые окна игнорируют этот флаг и всегда отображают длинные имена файлов. |
|
Восстанавливает текущий каталог до его исходного значения, если пользователь изменил каталог во время поиска файлов.
Этот флаг неэффективен для GetOpenFileName. |
|
Направляет диалоговое окно для возврата пути и имени файла выбранного ярлыка (. LNK) файл. Если это значение не указано, диалоговое окно возвращает путь и имя файла, на который ссылается ярлык. |
|
Для диалоговых окон старого стиля этот флаг приводит к использованию в диалоговом окне коротких имен файлов (формат 8.3). Обозреватель диалоговые окна игнорируют этот флаг и всегда отображают длинные имена файлов. |
|
Скрывает и отключает кнопку Сеть . |
|
В возвращенном файле не выбрано поле Только для чтения проверка и не находится в каталоге, защищенном от записи. |
|
Файл не создается до закрытия диалогового окна. Этот флаг следует указать, если приложение сохраняет файл в общей сетевой папке с созданием и немодифицировать. Если приложение задает этот флаг, библиотека не проверка для защиты от записи, полного диска, открытой двери диска или защиты сети. Приложения, использующие этот флаг, должны выполнять операции с файлами осторожно, так как после закрытия файла невозможно повторно открыть. |
|
Общие диалоговые окна допускают недопустимые символы в возвращенном имени файла. Как правило, вызывающее приложение использует процедуру перехватчика, которая проверяет имя файла с помощью сообщения FILEOKSTRING . Если текстовое поле в элементе управления редактированием пустое или не содержит ничего, кроме пробелов, списки файлов и каталогов обновляются. Если текстовое поле в элементе управления редактированием содержит что-либо другое, для nFileOffset и nFileExtension устанавливаются значения, созданные при анализе текста. В текст не добавляется расширение по умолчанию и не копируется в буфер, заданный lpstrFileTitle. Если значение, заданное параметром nFileOffset , меньше нуля, имя файла недопустимо. В противном случае имя файла является допустимым, и nFileExtension и nFileOffset можно использовать так, как если бы флаг OFN_NOVALIDATE не был указан. |
|
Вызывает диалоговое окно Сохранить как для создания окна сообщения, если выбранный файл уже существует. Пользователь должен подтвердить, следует ли перезаписать файл. |
|
Пользователь может вводить только допустимые пути и имена файлов. Если этот флаг используется и пользователь вводит недопустимый путь и имя файла в поле "Имя файла", функция диалогового окна отображает предупреждение в окне сообщения. |
|
Вызывает начальную настройку поля Только для чтения проверка при создании диалогового окна. Этот флаг указывает состояние поля Только для чтения проверка при закрытии диалогового окна. |
|
Указывает, что если вызов функции OpenFile завершается сбоем из-за нарушения общего доступа к сети, ошибка игнорируется, а диалоговое окно возвращает выбранное имя файла. Если этот флаг не установлен, диалоговое окно уведомляет процедуру перехватчика о нарушении общего доступа к сети для имени файла, указанного пользователем. Если задать флаг OFN_EXPLORER , диалоговое окно отправляет CDN_SHAREVIOLATION сообщение в процедуру перехватчика. Если OFN_EXPLORER не задано, диалоговое окно отправляет зарегистрированное сообщение SHAREVISTRING процедуре перехватчика. |
|
Вызывает отображение кнопки Справка в диалоговом окне. Участник hwndOwner должен указать окно для получения зарегистрированных сообщений HELPMSGSTRING , которые отправляет диалоговое окно, когда пользователь нажимает кнопку Справка . Диалоговое окно в стиле Обозреватель отправляет CDN_HELP уведомление процедуре перехватчика, когда пользователь нажимает кнопку Справка. |
nFileOffset
Тип: WORD
Отсчитываемое от нуля смещение в символах от начала пути до имени файла в строке, на которую указывает lpstrFile. Для версии ANSI это число байтов; Для версии Юникода это число символов. Например, если lpstrFile указывает на следующую строку c:\dir1\dir2\file.ext, этот элемент содержит значение 13, указывающее смещение строки file.ext. Если пользователь выбирает несколько файлов, nFileOffset — это смещение имени первого файла.
nFileExtension
Тип: WORD
Отсчитываемое от нуля смещение в символах от начала пути до расширения имени файла в строке, на которую указывает lpstrFile. Для версии ANSI это число байтов; Для версии Юникода это число символов. Обычно расширением имени файла является подстрока, которая следует за последним вхождением символа точки ("."). Например, txt — это расширение имени файла readme.txt, html — расширение readme.txt.html. Таким образом, если lpstrFile указывает на строку "c:\dir1\dir2\readme.txt", этот элемент содержит значение 20. Если lpstrFile указывает на строку "c:\dir1\dir2\readme.txt.html", этот элемент содержит значение 24. Если lpstrFile указывает на строку "c:\dir1\dir2\readme.txt.html.", этот элемент содержит значение 29. Если lpstrFile указывает на строку, которая не содержит символа ".", например "c:\dir1\dir2\readme", этот элемент содержит ноль.
lpstrDefExt
Тип: LPCTSTR
Расширение по умолчанию. GetOpenFileName и GetSaveFileName добавляют это расширение к имени файла, если пользователю не удается ввести расширение. Эта строка может быть любой длины, но добавляются только первые три символа. Строка не должна содержать точку (.). Если этот член имеет значение NULL и пользователю не удается ввести расширение, расширение не добавляется.
lCustData
Тип: LPARAM
Определяемые приложением данные, которые система передает в процедуру перехватчика, определяемую членом lpfnHook . Когда система отправляет сообщение WM_INITDIALOG в процедуру перехватчика, параметр lParam сообщения является указателем на структуру OPENFILENAME , указанную при создании диалогового окна. Процедура перехватчика может использовать этот указатель для получения значения lCustData .
lpfnHook
Тип: LPOFNHOOKPROC
Указатель на процедуру перехватчика. Этот элемент игнорируется, если элемент Flags не содержит флаг OFN_ENABLEHOOK .
Если флаг OFN_EXPLORER не задан в элементе Flags , lpfnHook является указателем на процедуру перехватчика OFNHookProcOldStyle , которая получает сообщения, предназначенные для диалогового окна. Процедура перехватчика возвращает значение FALSE , чтобы передать сообщение в процедуру диалогового окна по умолчанию, или TRUE , чтобы отменить сообщение.
Если задано OFN_EXPLORER , lpfnHook является указателем на процедуру перехватчика OFNHookProc . Процедура перехватчика получает уведомления, отправляемые из диалогового окна. Процедура перехватчика также получает сообщения для всех дополнительных элементов управления, определенных путем указания дочернего шаблона диалогового окна. Процедура перехватчика не получает сообщения, предназначенные для стандартных элементов управления диалогового окна по умолчанию.
lpTemplateName
Тип: LPCTSTR
Имя ресурса шаблона диалогового окна в модуле, определяемого элементом hInstance . Для нумерованных ресурсов диалогового окна это может быть значение, возвращаемое макросом MAKEINTRESOURCE . Этот элемент игнорируется, если в элементе Flags не установлен флаг OFN_ENABLETEMPLATE. Если установлен флаг OFN_EXPLORER, система использует указанный шаблон для создания диалогового окна, которое является дочерним для диалогового окна Обозреватель стиле по умолчанию. Если флаг OFN_EXPLORER не установлен, система использует шаблон для создания диалогового окна старого стиля, заменяющего диалоговое окно по умолчанию.
lpEditInfo
Этот элемент компилируется условно (с помощью #ifdef _MAC
), поэтому он применим только к компьютерам Motorola 68K Macintosh, а не к клиентским операционным системам Windows.
lpstrPrompt
Этот элемент компилируется условно (с помощью #ifdef _MAC
), поэтому он применим только к компьютерам Motorola 68K Macintosh, а не к клиентским операционным системам Windows.
pvReserved
Тип: void*
Этот элемент зарезервирован.
dwReserved
Тип: DWORD
Этот элемент зарезервирован.
FlagsEx
Тип: DWORD
Набор битовых флагов, который можно использовать для инициализации диалогового окна. В настоящее время этот элемент может быть равен нулю или следующему флагу.
Комментарии
В целях совместимости панель мест скрыта, если для параметра Flags задано значение OFN_ENABLEHOOK а параметр lStructSize — OPENFILENAME_SIZE_VERSION_400.
Примечание
Заголовок commdlg.h определяет OPENFILENAME в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Верхняя часть | commdlg.h (включая Windows.h) |
См. также раздел
Общая библиотека диалоговых окон
Основные понятия
Другие ресурсы
Справочные материалы