Win32 API. Библиотека стандартных диалоговых окон
Страница 12. Фильтры


Фильтры

Информация в этой статье применяется к диалоговым окнам Открыть (Open) и Сохранить как (Save As) как старого стиля, так и в стиле Проводника.

Вы можете дать фильтры имен файлов, чтобы помочь пользователю в ограничении имен файлов, которые отображает диалоговое окно. Фильтр имени файла состоит из пары строк с символом нуля в конце, описания и образца, присоединенных один к другому. Диалоговое окно показывает описание, которое позволяет пользователю выбрать, какой фильтр использовать; и использовать его как образец, чтобы выбрать файлы для отображения.

Чтобы определить фильтры, установите элемент lpstrFilter структуры OPENFILENAME, чтобы указать на буфер, который содержит массив пар строк фильтра. Последняя строка в массиве должна сопровождаться дополнительным символом нуля.

Строка образца может быть комбинацией допустимых символов имени файла и звездочки (*). Звездочка - подстановочный знак, который представляет любую комбинацию допустимых символов в имени файла. Диалоговое окно показывает только те файлы, которые соответствуют образцу. Чтобы определить множество образцов для того же самого описания, вы должны использовать точку с запятой (;), чтобы отделять образцы. Обратите внимание, что пробелы в строке образца могут привести к непредвиденным результатам.

Следующий фрагмент кода определяет два фильтра. Фильтр с описанием "Источник" имеет два образца. Если пользователь выбирает этот фильтр, диалоговое окно показывает только файлы, которые имеют .C и .CXX расширения.

OPENFILENAME ofn; // структура общего диалогового окна
ofn.lpstrFilter = "Source\0*.C;*.CXX\0All\0*.*\0"
ofn.nFilterIndex = 1;

Элемент nFilterIndex структуры OPENFILENAME определяет индекс, который указывает, какие фильтры первоначально использует диалоговое окно. Первый фильтр в буфере имеет индекс 1, второй 2, и так далее. Если пользователь изменяет фильтр при использовании диалогового окна, элемент nFilterIndex при возврате устанавливается в индекс выбранного фильтра.

Вы можете создать пользовательский фильтр, устанавливая элементе lpstrCustomFilter адрес буфера, который содержит одиночный фильтр, а, в элементе nMaxCustFilter устанавливаете размер буфера, в символах или байтах. Диалоговое окно всегда помещает пользовательский фильтр в начале списка фильтров и, при возврате, всегда модифицирует часть образца фильтра образцом из фильтра, выбранного пользователем.

Для диалоговых окон в стиле Проводника, заданное по умолчанию расширение может измениться, если пользователь выбирает другой фильтр. Если пользователь выбирает фильтр, у которого первый шаблон имеет форму *.xxx (то есть расширение не включает групповой символ), диалоговое окно использует xxx как заданное по умолчанию расширение. Это происходит, только в том случае, если вы определили заданное по умолчанию расширение в элементе lpstrDefExt структуры OPENFILENAME. Например, если пользователь выбирает фильтр " Source\0*.C; *.CXX\0 ", заданное по умолчанию расширение изменяется на "C". Однако, если бы вы определили фильтр как "Source\0*.C*\0", заданное по умолчанию расширение не изменилось бы, потому что расширение включает подстановочный знак. 

Проверка правильности Файла и Каталога

За исключением того что отмечено, информация в этой статье разделе применяется для диалогового окна Открыть(Open) и Сохранить как (Save As) как в стиле Проводника, так и в старом стиле.

Диалоговое окно автоматически проверяет правильность имен файлов вводимых с клавиатуры пользователем, чтобы гарантировать, что имена содержат только допустимые символы. Чтобы отменить проверку правильности символов имени файла, установите флажок OFN_NOVALIDATE.

Чтобы заставить диалоговое окно проверить, что пользователь определил имя существующего файла, установите флажок OFN_FILEMUSTEXIST. Чтобы заставить сделать проверку, что определяемый путь существует, установите флажок OFN_PATHMUSTEXIST. Если вы устанавливаете флажок OFN_CREATEPROMPT, диалоговое окно запрашивает у пользователя разрешение создать несуществующий файл. Если этот флажок установлен, и пользователь выбирает, чтобы создать новый файл, диалоговое окно закрывается, и функция возвращает определяемое имя. Иначе, диалоговое окно остается открытым.

Когда используется диалоговое окно Сохранить как (Save As), вы можете предписать диалоговому окну запросить у пользователя разрешение записать поверх существующего файла, установив флажок OFN_OVERWRITEPROMPT.

По умолчанию, диалоговое окно создает проверочный файл нулевой длины, чтобы определить, может ли новый файл быть создан в выбранном каталоге. Чтобы предотвращать создание этого проверочного файла, установите флажок OFN_NOTESTFILECREATE.

Если вы включаете фильтр - процедуру, диалоговое окно предупреждает фильтр - процедуру, когда происходит сетевая ошибка совместного доступа для имени файла, определяемого пользователем. Если вы устанавливаете флажок OFN_EXPLORER, диалоговое окно посылает сообщение CDN_SHAREVIOLATION фильтр - процедуре. Если Вы не устанавливаете OFN_EXPLORER, диалоговое окно посылает фильтр - процедуре зарегистрированное сообщение SHAREVISTRING. Чтобы оградить диалоговое окно от посылки каких-либо сообщений об ошибках совместного доступа, установите флажок OFN_SHAREAWARE.

Если пользователь выбирает отмечаемый блок "только для чтения", диалоговое окно при возврате устанавливает флажок OFN_READONLY. Чтобы скрыть отмечаемый блок Открыть Как Только для Чтения (Open As Read Only), установите флажок OFN_HIDEREADONLY. Чтобы оградить диалоговое окно от возвращающихся имен существующих файлов, которые имеют признак "только для чтения", установите флажок OFN_NOREADONLYRETURN.

Чтобы оградить диалоговое окно от получения значений связующих файлов, установите флажок OFN_NODEREFERENCELINKS. В этом случае, диалоговое окно возвращает имя файла связей скорее, чем имя файла, вызванного связующим файлом.

 
« Предыдущая статья   Следующая статья »