Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ch-11.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.26 Mб
Скачать

Творческое использование идентификаторов дочерних окон элементов управления

В программе HEXCALC нет заголовочного файла с идентификаторами всех дочерних окон управления, определенных в шаблоне окна диалога. Обойтись без этого файла можно, поскольку идентификационным номером каждой из кнопок установлен код ASCII того текста, который появляется на кнопке при ее выводе на экран. Это означает, что WndProc может обращаться с сообщениями WM_COMMAND и WM_CHAR почти одинаково. В каждом случае параметр wParam является кодом ASCII текста кнопки.

Конечно, небольшая модификация сообщений от клавиатуры все же необходима. WndProc обрабатывает сообщения WM_KEYDOWN таким образом, чтобы преобразовать клавишу "стрелка влево" в клавишу <Backspace>. При обработке сообщений WM_CHAR WndProc преобразует код символов к верхнему регистру, а клавишу <Enter> к ASCII-коду клавиши <Equals>.

Правильность сообщений WM_CHAR контролируется с помощью вызова функции GetDlgItem. Если возвращаемым значением функции является 0, то значит символ клавиатуры не является одним из идентификаторов, определенных в шаблоне окна диалога. Однако, если символ один из этих идентификаторов, то соответствующей кнопке посылается пара сообщений BM_SETSTATE, так, что она в момент нажатия "залипает":

hButton = (GetDlgItem (hwnd, wParam) ;

if (hButton != NULL)

{

SendMessage (hButton, BM_SETSTATE, 1, 0) ;

SendMessage (hButton, BM_SETSTATE, 0, 0) ;

}

Это с минимальными усилиями делает более привлекательным процесс нажатия клавиш в интерфейсе программы HEXCALC.

Когда WndProc обрабатывает сообщения WM_COMMAND, она всегда помещает фокус ввода в родительское окно:

case WM_COMMAND :

SetFocus (hwnd) ;

В противном случае фокус ввода оказался бы на одной из кнопок, независимо от того, был ли на ней щелчок мыши.

Диалоговые окна общего пользования

Одной из первостепенных задач Windows было содействовать созданию стандартизированного интерфейса пользователя. Для многих общепринятых пунктов меню это было сделано достаточно быстро. Почти все производители программного обеспечения для открытия файла использовали последовательность Alt-File-Open. Однако, сами окна диалога для открытия файла часто были совершенно непохожи.

Начиная с версии Windows 3.1, решение этой задачи было найдено и продолжает обеспечиваться под Windows 95. Этим решением стала библиотека диалоговых окон общего пользования (common dialog box library). В этой библиотеке содержатся несколько функций, которые вызывают стандартные окна диалога для открытия и сохранения файлов, поиска и замены, выбора цветов и шрифтов (все это будет показано в этой главе) и для печати (о чем будет рассказано в главе 15).

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

Функции и структуры, которые необходимы для использования этих окон диалога, определяются в заголовочном файле COMMDLG.H. Файл COMDLG32.LIB представляет собой библиотеку импорта диалоговых окон общего пользования, а файл COMDLG32.DLL — это динамически подключаемая библиотека, в которой содержатся шаблоны и процедуры окон диалога.

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