Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
43-70_otvety_na_teplogo.docx
Скачиваний:
0
Добавлен:
27.12.2019
Размер:
87.53 Кб
Скачать

65. Окна диалога и их назначение. Модальные и немодальные окна. Описание окон диалога в файле ресурсов.

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

При выводе на экран модального диалога пользователь не может переключаться между окном диалога и другими окнами программы. Пользователь должен сначала закончить работу с окном диалога, что обычно делается путем щелчка на кнопке типа ОК или Cancel. Также существуют системные модальные окна, которые в отличии от обычных не позволяют переключаться на другие программы.

Немодальный диалог после своего создания получает фокус и позволяет также отобрать параметры для программы. В любой момент можно перевести фокус с немодального диалога на другое окно приложения. Немодальный диалог обычно имеет кнопку «Применить», по которой главное окно получает WM_COMMAND и забирает из диалога выбранные параметры. По внешнему виду это обычное окно

AboutBox DIALOG 20,20,160,80

STYLE WS_POPUP | WS_DLGFRAME

{

CTEXT „About1“ -1, 0, 12, 160, 8

Icon „About1“

CTEXT „About Box Demo Program“ -1, 8, 8, 0, 0

CTEXT “© Charles Petzold, 1996” -1, 0, 48, 160, 8

DEFPUSHBUTTON “OK” IDOK, 64, 60, 32, 14, WS_GROUP

}

Первая строка – имя (AboutBox). Далее следует ключевое слово DIALOG и 4 числа – первые 2 это координаты х и у верхнего левого угла окна диалога относительно рабочей области родительского окна при вызове окна диалога программой. Вторые 2 числа – ширина и высота окна диалога.

Координаты задаются не в пикселях. Х =1/4 средней ширины символа, Y = 1/8 высоты символа.

Внутри фигурных скобок определяются те дочерние окна элементов управления, которые появятся в окне диалога. В нашем окне диалога используются дочерние окна элементов управления трех типов: CTEXT (текст, выровненный по центру), ICON (значок) и DEFPUSHBUTTON (кнопка, выбираемая по умолчанию). Форматинструкций описания следующий:

control-type "text" id, xPos, yPos, xWidth, yHeight [, iStyle]

Значение iStyle в конце инструкции не является обязательным; оно задает дополнительные стили окна, используя идентификаторы, заданные в заголовочных файлах Windows.

Если с идентификатором WS_GROUP – определяет начало группы, WS_TABSTOP – элемент, который получает фокус по кругу клавишей TAB.

66. Создание модального окна диалога. Диалоговая процедура, её назначение, и применение.

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

BOOL CALLBACKAboutDlgProc(HWND hDlg, UINT iMsg, WPARAM wParam,LPARAM lParam)

{…}

Параметры такие же как и у оконной процедуры, можно даже вместо hDlg применять hWnd.

Первым сообщением, которое получает окно диалога является WM_INITDIALOG. Это сообщение посылается только процедурам диалога. Если процедура возвращает TRUE, то Windows помещает фокус на ввода на первое дочернее окно элемента , имеющее стиль WS_TABSTOP. Можно использовать SetFocus для установки фокуса, тогда функция возвращает False.

Сообщения для модального окна диалога не проходят через очередь сообщений программы .

66. Создание модального окна диалога. Диалоговая процедура, её назначение, и применение.

Модальные окна — это окна, при появлени которых на экране запрещается доступ к родительскому окну.

Для создания модальных диалоговых окон существует функция

function DialogBoxParam(hInstance: HINST; lpTemplateName: PChar; hWndParent: HWND; lpDialogFunc: TFNDlgProc; dwInitParam: LPARAM): Integer

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

процедура диалога должна быть определена как функция типа CALLBACK. Хотя в качестве описателя окна диалога использовался описатель hDlg, вместо него можно при желании использовать hwnd. процедура диалогового окна возвращает значение типа BOOL . Если оконная процедура не обрабатывает какое-то сообщение, она вызывает DefWindowProc; процедура диалога, если она не обрабатывает сообщение, возвращает FALSE (0), а если обрабатывает, то TRUE . Процедура диалога не обрабатывает сообщения WM_PAINT и WM_DESTROY. Процедура диалога не получит сообщения WM_CREATE; вместо этого она выполняет инициализацию при обработке специального сообщения WM_INITDIALOG. Единственным оставшимся сообщением, которое обрабатывает процедура окна диалога, является WM_COMMAND. Это то сообщение, которое элемент управления кнопка посылает своему родительскому окну тогда, когда либо на ней производится щелчок мышью, либо нажата клавиша <Spacebar> (пробел) и кнопка имеет фокус ввода.

66а. Порядок установки начального фокуса в диалоговом окне.

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

66б. Порядок передачи фокуса между дочерними окнами в окне диалога.

Сообщение WM_INITDIALOG является первым сообщением, которое получает процедура диалога. Это сообщение посылается только процедурам диалога. Если процедура диалога возвращает TRUE, то Windows помещает фокус ввода на первое дочернее окно элемента управления, которое имеет стиль WS_TABSTOP. С другой стороны, при обработке сообщения WM_INITDIALOG процедура диалога может использовать функцию SetFocus для того, чтобы установить фокус на одно из дочерних окон управления окна диалога, и тогда она должна вернуть значение FALSE.

66в. Различия в назначении кнопок PUSHBUTTON и DEFPUSHBUTTON в окне диалога.

BS_PUSHBUTTON - создает обычную кнопку, которая посылает

сообщение WM_COMMAND окну-владельцу, когда пользователь

выбирает её.

BS_DEFPUSHBUTTON - создаёт кнопку по умолчанию

( вокруг неё будет тонкая темная рамка ). Если

пользователь нажмет ENTER, то запустится обработчик

нажатия на эту кнопку.

66г. Использование клавиатуры для выбора параметров в окне диалога.

Win32 API автоматически предоставляет интерфейс клавиатуры для всех модальных диалоговых окон. Она не дает этот интерфейс для немодальных блоков диалога, если прикладная программа не вызвала функцию IsDialogMessage, чтобы фильтровать сообщения в ее главном цикле сообщений. Это означает, что прикладная программа должна передать сообщение в IsDialogMessage немедленно после извлечения сообщения из очереди сообщений. Функция обрабатывает сообщения, если они для диалогового окна и возвращает значение отличное от нуля, чтобы указать, что сообщение было обработано и его невозможно было передать в функции TranslateMessage или DispatchMessage.

ALT+mnemonic - Перемещает фокус ввода данных в первый элемент управления (имеющий стиль WS_TABSTOP) после статического элемента управления, содержащего данный символ.

DOWN - Перемещает фокус ввода данных в следующий элемент управления в группе.

ENTER - Посылает сообщение WM_COMMAND процедуре диалогового окна. В параметре wParam установлен IDOK или идентификатор элемента управления командной кнопки заданной по умолчанию.

ESC - Посылает сообщение WM_COMMAND процедуре диалогового окна. В параметре wParam установлен флажок IDCANCEL.

LEFT - Перемещает фокус ввода данных в предыдущий элемент управления в группе.

mnemonic - Перемещает фокус ввода данных в первый элемент управления (имеющий стиль WS_TABSTOP) после статического элемента управления, содержащего данный символ.

RIGHT - Перемещает фокус ввода данных в следующий элемент управления в группе.

SHIFT+TAB - Перемещает фокус ввода в предыдущий элемент управления, который имеет стиль WS_TABSTOP.

TAB - Перемещает фокус ввода в следующий элемент управления, который имеет стиль WS_TABSTOP.

UP - Перемещает фокус ввода данных в предыдущий элемент управления в группе.

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