Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI-ekz_shpory.docx
Скачиваний:
11
Добавлен:
25.09.2019
Размер:
185.19 Кб
Скачать

2. Создание функции диалога.

Функция диалога, предназначенная для обработки сообщений от диалоговой панели:

BOOL CALLBACK _export DlgProc (HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam); - можно выбрать любое имя. (HWND hdlgидентификатор диалоговой панели)

Как правило, функция диалога всегда обрабатывает сообщения WM_INITDIALOG (при инициализации диалога) и WM_COMMAND, не обрабатывает WM_CREATE, WM_PAINT, WM_DESTROY. Не может вызвать функцию обработки сообщений по умолчанию DefWindowProc.

а) Сообщение WM_INITDIALOG использует параметры wParam (идентификатор ОУ, который первым получит фокус ввода, первый, описанный в шаблоне WM_TABSTOP) и lParam (содержит значение, передаваемое приложением при создании диалоговой панели).

б) Сообщение WM_COMMAND, поступающее в функцию диалога, передает сообщения или извещения от органов управления, расположенных в диалоговой панели. Крое этого, функция диалога может получить это сообщение с параметром wParam, равным константам IDOK и IDCANCEL (если нажата кнопка с данным идентификатором или закрытие с помощью системного меню или клавиши <Esc>), описанным в файле windows.h.

Сообщение с параметром IDOK поступает в том случае, если нажат <Enter> в момент, когда ни одна из кнопок, расположенных в диалоговой панели, не имеет фокус ввода, и ни одна из кнопок не имеет стиль WS_DEFPUSHBUTTON. Если в диалоговой панели есть кнопка со стилем WS_DEFPUSHBUTTON, в описанной ситуации в функцию диалога поступает сообщение WM_COMMAND с параметром wParam, равным идентификатору этой кнопки.

3. Вызов одной из функций создания диалога

Диалоговые панели бывают трех типов: модальные, системные модальные и немодальные.

Модальная: главное окно приложения и его дочерние окна блокируются, перестают получать сообщения от мыши и клавиатуры. Но есть возможность работать с другими приложениями. Чтобы и это запретить – системные модальные диалоговые панели.

Немодальная диалоговая панель не блокирует работу основного окна приложения и его дочерних окон. Вы можете работать как с диалоговой панелью, так и с окном приложения.

В зависимости от создаваемой диалоговой панели (модальной или немодальной) будут использованы различие функции создания (DialogBox (+ прочие) или CreateDialog (+ прочие)), уничтожения (EndDialog или DestroyWindow), также будут различия в цикле обработки сообщения (см. вопросы 15, 16).

___________________________________________________________________________

Сообщения для органов управления

Органы управления посылают в функцию диалога сообщение WM_COMMAND. В свою очередь, приложение может посылать различные сообщения ОУ, вызывая функцию SendMessage.

Для посылки сообщения также удобно использовать функцию SendDlgItemMessage (не требуется указывать идентификаторы окна органов управления):

LRESULT WINAPI SendDlgItemMessage(HWND hdlg, int idDlgItem, UINT uMsg, WPARAM wParam, LPARAM lParam);

hdlg – идентификатор диалоговой панели, idDlgItem – идентификатор органа управления, uMsgномер сообщения, wParam, lParamпараметры сообщения.

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

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