Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции -Процедурное программирование в Windows.doc
Скачиваний:
13
Добавлен:
13.09.2019
Размер:
742.91 Кб
Скачать

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

В большинстве случаев окно-список используют, чтобы дать возможность пользователям выбрать файл с диска. Чтобы заполнить окно–список именами файлов и каталогов, приложение должно передать окну-списку сообщение LB_DIR:

SendMessage ( hListWnd, LB_DIR, wAttr, (LONG) lpszFileSpec);

Младший байт параметра wAttr определяет атрибуты файлов, отображаемых в окне–списке.Они идентичны с атрибутами файлов MS–DOS:

wAttr

Атрибуты файлов

0x0000

0x0001

0x0002

0x0004

0x0010

0x0020

Обычные файлы

Файлы только для чтения

Скрытые файлы

Системные файлы

Подкаталоги

Бит архивации (установлен, когда файл не выгружен)

Старший байт переменной wAttr обеспечивает дополнительные возможности управления списком файлов:

wAttr

Опция

0х4000

0х8000

Добавить символ устройства

Только поиск

Например, для того чтобы включить в окно-список все файлы, подкаталоги и символы устройств (литеры дисководов), переменная wAttr должна быть равна 0x4037.

Можно включить в список файлов только файлы с определенным расши–рением. Для этого параметр lParam сообщения LB_DIR содержит дальний указатель на строку, содержащую шаблон имени файла для поиска на дисках. Например, если параметр lParam сообщения указывает на строку «*с», то в список файлов будут включены только файлы с расширением «с». Параметр lParam не влияет на каталоги, содержащиеся в списке файлов.

Заметим, что символы дисковых устройств отображаются в следующем формате (диск А: ): [-A-]

Элемент «[..]» списка файлов позволяет переместиться на более высокий уровень каталога, а элемент, имеющий формат [SUBDIR], обозначает каталоги.

Windows не имеет функций для поиска файлов по шаблону, но их можно моделировать, создав окно-список файлов, не отображая его на экране. Для этого достаточно не использовать тип WS_VISIBLE при создании окна и, когда поиск файлов произведен, уничтожить окно-список, вызвав функцию DestroyWindow.

Изменение цвета органов управления

Для этого требуется специальная обработка сообщения WM_CTLCOLOR.

Это сообщение стандартные органы управления посылает функции родительского окна перед тем, как перерисовать изображение органа управления на экране.

Когда функция родительского окна получает сообщение WM_CTCOLOR, то в параметре wParam хранится дескриптор контекста устройства дочернего окна, в младшем слове параметра lParam – дескриптор самого дочернего окна, а в старшем слове параметра lParam при помощи предопределенных констант кодируется тип окна (органа управления):

Константа

Тип окна

CTLCOLOR_MSGBOX

CTLCOLOR_EDIT

CTLCOLOR_LISTBOX

CTLCOLOR_BTN

CTLCOLOR_DLG

CTLCOLOR_SCROLLBAR

CTLCOLOR_STATIC

Окно – сообщение

Окно – редактор

Окно – список

Окно – кнопка ( переключатель )

Диалоговое окно

Полоса прокрутки

Статический орган управления

То, что в параметре сообщения WM_CTLCOLOR содержится дескриптор контекста устройства, означает что можно изменять цвет дочернего окна – органа управления. В самом деле, любая функция GDI осуществляет действие именно над контекстом устройства, а он–то в сообщении WM_CTLCOLOR принадлежит органу управления.

Обрабатывая сообщение, необходимо проделать 3 операции:

  1. Установить цвет фона при помощи функции SETBKCOLOR.

  2. Установить цвет текста при помощи функции SETTEXTCOLOR.

  3. Возвратить дочернему окну манипулятор той кисти, которой вы хотите отрисовать этот орган управления.

Однако у кисти, которая является шаблоном некоторой цветных пикселов, есть начальная точка – точка повторения шаблона. И если одну и туже кисть использовать для двух разных окон (например, для родительского и дочернего), то на их границе двух шаблоны стыковаться на будут. Для того чтобы избежать это, следует:

  1. Вызовом функции UnrealizeObject «сбросить» начальную точку кисти, что приведет к тому, что при следующем выборе ее в контекст устройства она будет установлена заново.

  2. Установит новую начальную точку кисти функцией SetBrushOrg; новая начальная точка будет установлена при следующем выборе кисти в контекст устройства.

Таким образом, можно установить цвет дочерних окон – органов управления.