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

Взаимодействие с органами управления диалоговых окон

Органы управления – это дочерние окна, поэтому обмен информации между ними и приложением осуществляется посредством передачи сообщений.

От диалогового окна приложение принимает сообщение WM_COMMAND. Параметр wParam при этом содержит идентификатор органа управления, от которого поступило сообщение.

Однако функции API для обработки диалоговых окон используют дескриптор органа управления.

Дескриптор дочернего окна органа управления помещается в младшем слове параметра lParam.

Кроме того, имеется функция GetDlgItem, позволяющая по идентификатору органа управления диалогового окна получить дескриптор этого окна-органа управления:

hDlgCtrl = GetDlgItem ( hDlg, nID ) ;

Первый параметр функции GetDlgItem содержит дескриптор диалогового окна, а второй – идентификатор органа управления, дескриптор которого мы желаем получить. При помощи функции GetWindowWord можно, наоборот, по дескриптору органа управления получить его идентификатор. Для этой цели используется флаг GWW_ID:

nID = GetWindowWord ( hDlgCtrl , GWW_ID );

Для взаимодействия с органами управления очень важными являются две следующие функции:

SendMessage ( ) и PostMessage ( ).

Основное назначение этих функций: выдавать конкретному окну команду на выполнение некоторого задания.

Функция SendMessage ( ) явно вызывает процедуру соответствующего окна, передает ей сообщение и не выходит из этой процедуры, пока она не обработает это сообщение. То есть функция SendMessage ( ) не закончит свою работу, пока сообщение не будет обработано.

Функция PostMessage ( ) – не вызывает явно оконную процедуру, а пересылает сообщение в очередь приложения, которое извлекается оттуда функцией GetMessage ( ).

Функция PostMessage ( ) заканчивается немедленно, как только поместит сообщение в очередь приложения.

Функции SendMessage ( ) и PostMessage ( ) имеют следующий формат :

SendMessage ( hWnd, iMessage, wParam, lParam );

PostMessage ( hWnd, iMessage, wParam, lParam );

hWnd – дескриптор окна, которому посылается сообщение;

iMessage – сообщение;

wParam и lParam – параметры сообщения;

Например, если необходимо программно имитировать нажатие кнопки, то дочернему окну – органу управления – кнопке послать сообщение BM_SETSTATE

SendMessage ( hWnd_Button, BM_SETSTATE, 1,OL ),

где hWnd_Button – дескриптор окна - кнопки.

Для того , чтобы определить дескриптор окна - кнопки удобно воспользоваться функцией GetDlgItem ( ) :

hWnd_Button = GetDlgItem ( hDlg, ID_BUTTON ) ;

где hDlg – дескриптор окна диалога ;

ID_BUTTON – идентификатор окна - кнопки ;

Совместное использование функций GetDlgItem ( ) и SendMessage ( ) выглядит так:

SendMessage ( GetDlgItem ( hDlg, ID_BUTTON ),BM_SETSTATE,1, OL ).

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

SendDlgItemMessage (hDlg, nID, iMessage, wParam, lParam),

т.е. эквивалентом прдыдущей функции SendMessage ( ) является следующее обращение :

SendDlgItemMessage (hDlg, ID_BUTTON, BM_SETSTATE, 1, OL ).

Таким образом функция SendDlgItemMessage ( ) посылает сообщение в орган управления с идентификатором nID окна с дескриптором hDlg, аналогично функции SendMessage ( ).

При работе с кнопками используются также другие функции. Например, функция CheckRadioButton ( ) позволяет перевести все переключатели диалогового окна hDlg с идентификаторами от nFirstID до nLastID , за исключением переключателя с идентификатором nCheckID , в положение « выключено »:

CheckRadioButton ( hDlg, nFirstID, nLastID, nCheckID ) ;

Функция CheckDlgButton позволяет «нажать» или «отпустить» кнопку :

CheckDlgButton ( hDlg, nCheckboxID, wCheck );

Если параметр wCheck равен нулю, то кнопка «отпускается» , единице – «нажимается».

Для проверки положения кнопки в диалоговом окне используется функция IsDlgButtonChecked :

wCheck = IsDlgButtonChecked ( hDlg, nCheckboxID );