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

8.1.2 Сообщения дочерних окон родительскому окну

Когда вы запускаете программу BTNLOOK, вы видите различные типы кнопок, выводимые на экран в левой части рабочей области. Как уже говорилось, когда вы щелкаете мышью на кнопке, дочернее окно управления посылает сообщение WM_COMMAND своему родительскому окну. Программа BTNLOOK обрабатывает сообщение WM_COMMAND и выводит на экране значения параметров wParam и lParam. Здесь приведен их смысл:

LOWORD (wParam) Идентификатор дочернего окна

HIWORD (wParam) Код уведомления

lParam Описатель дочернего окна

Идентификатор дочернего окна — это значение, передаваемое функции CreateWindow, когда создается дочернее окно. В программе BTNLOOK этими идентификаторами являются значения от 0 до 9 для 10 выводимых в рабочую область кнопок. Описатель дочернего окна — это значение, которое Windows возвращает при вызове функции CreateWindow.

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

Коды уведомления от 1 до 5 — это коды для кнопок устаревшего стиля BS_USERBUTTON, поэтому вы столкнетесь только с кодами BN_CLICKED.

Обратите внимание, что при щелчке мышью текст кнопки обводится пунктирной линией. Это говорит о том, что кнопка имеет фокус ввода. Теперь весь ввод клавиатуры направлен на дочернее окно кнопки, а не на главное окно. Однако, если кнопка имеет фокус ввода, она игнорирует любые нажатия клавиш за исключением <Spacebar>, которая теперь оказывает то же действие, что и щелчок мыши.

8.1.3 Сообщения родительского окна дочерним окнам

Оконная процедура также может посылать сообщения дочернему окну управления, хотя в программе BTNLOOK и не отражен этот факт. Пять специальных сообщений для кнопок определены в заголовочных файлах Windows; каждое из которых начинается с префикса "BM", что означает "button message" (сообщение кнопки). Вот эти сообщения:

BM_GETCHECK

BM_SETCHECK

BM_GETSTATE

BM_SETSTATE

BM_SETSTYLE

Сообщения BM_GETCHECK и BM_SETCHECK посылаются родительским окном дочернему окну управления для установки и снятия контрольных меток флажков (check boxes) и переключателей (radio buttons). Сообщения BM_GETSTATE и BM_SETSTATE касаются обычного или "нажатого" состояния окна при щелчке мышью или нажатии клавиши <Spacebar>. (Мы рассмотрим как работают эти сообщения при изучении кнопки каждого типа.) Сообщение BM_SETSTYLE позволяет вам изменять стиль кнопки после ее создания.

Каждое дочернее окно имеет описатель окна и его идентификатор, который является уникальным среди других. Знание одного из этих элементов позволяет вам получить другой. Если вы знаете описатель дочернего окна, то можете получить его идентификатор:

id = GetWindowLong(hwndChild, GWL_ID);

Программа CHECKER3 в главе 6 показала, что окно может хранить данные в специальной области, зарезервированной при регистрации класса окна. Область, в которой хранится идентификатор дочернего окна, резервируется операционной системой Windows при его создании. Вы можете также использовать функцию:

id = GetDlgCtrlID(hwndChild);

Хотя часть имени функции "Dlg" относится к окну диалога, на самом деле эта функция общего назначения.

Зная идентификатор, вы можете получить описатель дочернего окна:

hwndChild = GetDlgItem(hwndParent, id);

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