4.18 - Фильтры

Информация в этой статье применяется к диалоговым окнам Открыть (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", заданное по умолчанию расширение не изменилось бы, потому что расширение включает подстановочный знак.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Владимир Соковиков - 18.03.2002