Структура OPENFILENAMEW (commdlg.h)
[Начиная с Windows Vista, общие диалоговые окна "Открыть" и "Сохранить как" заменены диалоговым окном "Общий элемент". Мы рекомендуем использовать API общих диалоговых окон вместо этих диалоговых окон из общей библиотеки диалоговых окон.]
Содержит сведения, используемые функциями GetOpenFileName и GetSaveFileName для инициализации диалогового окна Открыть или Сохранить как . После закрытия пользователем диалогового окна система возвращает сведения о выборе пользователя в этой структуре.
Синтаксис
typedef struct tagOFNW {
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCWSTR lpstrFilter;
LPWSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPWSTR lpstrFile;
DWORD nMaxFile;
LPWSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCWSTR lpstrInitialDir;
LPCWSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCWSTR lpstrDefExt;
LPARAM lCustData;
LPOFNHOOKPROC lpfnHook;
LPCWSTR lpTemplateName;
LPEDITMENU lpEditInfo;
LPCSTR lpstrPrompt;
void *pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
} OPENFILENAMEW, *LPOPENFILENAMEW;
Члены
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 , а текущий каталог содержит файлы указанных типов фильтров, то начальным каталогом будет текущий каталог.
- В противном случае начальным каталогом является каталог личных файлов текущего пользователя.
- В противном случае начальным каталогом будет папка Desktop.
- Если lpstrFile содержит путь, этот путь является начальным каталогом.
- В противном случае lpstrInitialDir указывает исходный каталог.
- В противном случае, если в прошлом приложение использовало диалоговое окно Открыть или Сохранить как , в качестве начального каталога выбирается последний использованный путь. Однако если приложение не выполняется в течение длительного времени, сохраненный выбранный путь удаляется.
- Если lpstrInitialDir имеет значение NULL , а текущий каталог содержит файлы указанных типов фильтров, то начальным каталогом будет текущий каталог.
- В противном случае начальным каталогом является каталог личных файлов текущего пользователя.
- В противном случае начальным каталогом будет папка Desktop.
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 . Этот элемент игнорируется, если флаг OFN_ENABLETEMPLATE не установлен в элементе Flags . Если установлен флаг OFN_EXPLORER, система использует указанный шаблон для создания диалогового окна, которое является дочерним по отношению к диалоговому окку Обозреватель по умолчанию. Если флаг OFN_EXPLORER не задан, система использует шаблон для создания диалогового окна старого стиля, заменяющего диалоговое окно по умолчанию.
lpEditInfo
Этот элемент компилируется условно (с помощью #ifdef _MAC
), поэтому он применим только к компьютерам Motorola 68K Macintosh, а не к клиентским операционным системам Windows.
lpstrPrompt
Этот элемент компилируется условно (с помощью #ifdef _MAC
), поэтому он применим только к компьютерам Motorola 68K Macintosh, а не к клиентским операционным системам Windows.
pvReserved
Тип: void*
Этот элемент зарезервирован.
dwReserved
Тип: DWORD
Этот элемент зарезервирован.
FlagsEx
Тип: DWORD
Набор битовых флагов, которые можно использовать для инициализации диалогового окна. В настоящее время этот элемент может быть равен нулю или следующему флагу.
Комментарии
В целях совместимости панель Places скрыта, если для параметра Flags задано значение OFN_ENABLEHOOK, а значение lStructSize — OPENFILENAME_SIZE_VERSION_400.
Примечание
Заголовок commdlg.h определяет OPENFILENAME как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Верхняя часть | commdlg.h (включая Windows.h) |
См. также раздел
Общая библиотека диалоговых окон
Основные понятия
Другие ресурсы
Справочные материалы