Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

8.6.6 Список файлов

Лучшее оставлено напоследок: самым мощным сообщением окон списка является сообщение LB_DIR. Следующий оператор заполняет список перечнем файлов каталога, иногда с подкаталогами и именами доступных дисков:

SendMessage(hwndList, LB_DIR, iAttr,(LPARAM) szFileSpec);

Использование атрибутов файлов

Параметр iAttr — это код атрибута файла. Младший значащий байт — обычный атрибут файла, используемый при вызовах функций MS-DOS:

Старший байт обеспечивает некоторый дополнительный контроль:

Когда значение iAttr сообщения LB_DIR равно DDL_READWRITE, то в списке перечисляются обычные файлы, файлы только для чтения и файлы с установленным архивным битом. Это соответствует логике, используемой функциями MS-DOS для поиска файлов. Если значение iAttr сообщения LB_DIR равно DDL_DIRECTORY, то в список, дополнительно к файлам, включаются имена подкаталогов в квадратных скобках. Если значение iAttr сообщения LB_DIR равно DDL_DRIVES | DDL_DIRECTORY, то в список добавляются буквенные идентификаторы всех доступных дисков, при этом они расположены между черточками.

При установке в iAttr старшего бита перечисляются только файлы с установленными флагами, обычные файлы не включаются. Для программы резервного копирования файлов, например, можно перечислить только те файлы, которые были изменены после последнего резервирования. В таких файлах установлен архивный бит, поэтому можно использовать DDL_EXCLUSIVE | DDL_ARCHIVE.

Упорядочивание списков файлов

Параметр lParam — это указатель на строку, задающую спецификацию файлов, например, "*.*". Такая спецификация файлов не влияет на подкаталоги, которые содержатся в списке.

Сообщение LBS_SORT можно использовать для окна списка файлов. Окно списка будет сначала отображать файлы, удовлетворяющие спецификации, а затем, необязательно, список доступных дисков в виде:

[-A-]

и (тоже необязательно) имена подкаталогов. Первый подкаталог будет выглядеть следующим образом:

[..]

Эта "двоеточие" — точка входа в подкаталог на уровень выше в сторону корневого каталога. (Точка входа не появится, если вы перечисляете файлы корневого каталога.) И наконец, указанные имена подкаталогов перечисляются в виде:

[SUBDIR]

Если вы не используете сообщение LBS_SORT, имена файлов и подкаталогов выводятся вперемешку, а имена доступных дисков оказываются в конце списка.

8.6.7 Утилита Head для Windows

Хорошо известная в операционной системе UNIX утилита "head" (заголовок) выводит на экран начальные строки файла. Давайте используем окно списка для написания аналогичной программы для Windows. В программе HEAD в списке перечисляются все файлы и подкаталоги. Вы можете выбрать файл для отображения с помощью двойного щелчка мыши на имени файла или, если имя файла выделено, нажав клавишу <Enter>. Вы также можете изменить подкаталог, используя любой из этих способов. Программа HEAD выводит на экран в правую часть рабочей области окна до 8 килобайт информации из начала файла.

В программе ENVIRON, когда мы выбирали переменную окружения — либо с помощью щелчка мыши, либо с помощью клавиатуры — программа выводила на экран соответствующую строку. Однако, если бы мы использовали аналогичный прием в программе HEAD, программа была бы слишком медленной, поскольку ей пришлось бы долго открывать и закрывать каждый выбранный файл по мере перемещения вашей выборки по списку. Вместо этого в программе HEAD необходим двойной щелчок мыши на имени файла или подкаталога. Это несколько затрудняет задачу, поскольку управляющее окно списка не имеет встроенного интерфейса клавиатуры, который бы соответствовал двойному щелчку мыши. А, как известно, необходимо обеспечивать интерфейс клавиатуры там, где это возможно.

В чем же состоит решение? Конечно, во введении дополнительной оконной процедуры. Новая оконная функция класса списка в программе HEAD называется ListProc. Она просто отслеживает сообщение WM_KEYDOWN с параметром wParam, равным VK_RETURN, и посылает сообщение WM_COMMAND с кодом уведомления LBN_DBLCLK обратно родительскому окну. При обработке в WndProc сообщения WM_COMMAND, для контроля выбранного пункта, используется функция Windows OpenFile. Если функция OpenFile возвращает ошибку, то значит выбран не файл, а, возможно, подкаталог. Затем для смены подкаталога в программе HEAD используется функция chdir. Программа посылает окну списка сообщение LB_RESETCONTEXT для обновления контекста и сообщение LB_DIR для заполнения окна списка перечнем файлов нового подкаталога.

При обработке сообщения WM_PAINT в оконной процедуре открывается файл с использованием функции Windows OpenFile. Возвращаемым значением функции является описатель файла MS-DOS, который может быть передан функциям Windows _lread и _lclose. Содержимое файла выводится на экран с помощью функции DrawText.

282

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]