На этом шаге мы рассмотрим диалоговые окна, определенные программистом.
Если нет подходящего стандартного диалогового окна, то программист может спроектировать свое диалоговое окно.
Каждый элемент управления в диалоговом окне, должен иметь идентификатор (целое число), который уникален в пределах диалогового окна. Этот идентификатор называется идентификатором элемента управления (CtrlId). Целое значение, соответствующее идентификатору элемента управления, используется в сообщениях уведомления родительских окон. Идентификатор элемента управления определяет, какой элемент породил событие.
Если новый элемент управления размещается в диалоговом окне при помощи редактора окон и диалоговых окон VDE, он получает именованный идентификатор - константу. Во время компиляции VDE генерирует файл <project>.CON, который связывает целые значения со всеми константами - идентификаторами ресурсов элементов управления согласно конкретным правилам. Этот файл включен во все модули, которые используют VPI. Во время построения проекта VDE генерирует файл <project>.RES, в котором все элементы управления идентифицируются только этими целыми значениями.
Следующие идентификаторы ресурсов должны использоваться для всех кнопок ОК, Cancel и Help.
idc_ok=l idc_cancel=2 idc_help=3
При использовании пакета диалоговых окон важно, чтобы диалоговое окно имело эти три кнопки с надлежащими идентификаторами, потому что предполагается, что эти кнопки существуют, и используются для закрытия диалогового окна.
Если диалоговое окно было сгенерировано при помощи редактора диалоговых окон Visual Prolog и размещено в сегменте ресурсов, то создать диалоговое окно можно при помощи вызова:
Window=win_CreateResDialog( ParentWindow,Windowtype,ResId,EventHandler,CreationData)
Здесь ParentWindow - это окно, которое получит фокус после закрытия диалогового окна. Windowtype должен быть равен wd_Modal или wd_ModeLess в зависимости от того, какое нужно диалоговое окно. ResId - целое число, которое определяет диалоговое окно в RES-файле, EventHandler - предикат обратного вызова, который используется для обработки событий от диалогового окна, CreationData - значение типа long, которое передается событию e_Create.
Также можно создать диалоговое окно из списковой структуры вызовом:
Window=win_CreateDynDialog( ParentWindow,Windef_list,EventHandler,CreationData)
Другой способ создания диалоговых окон - создание непосредственно диалогового окна при помощи предиката win_Create, а затем поочередное создание элементов управления вызовом предиката win_CreateControl.
При создании диалогового окна обработчику событий диалогового окна посылается событие e_Create. В предложении, обрабатывающем событие e_Create, должны быть проинициализированы все элементы управления диалогового окна. Для каждого типа элементов управления существуют различные предикаты, которые используются для установки значений элементов управления (таблица 1).
Тип элемента управления | Предикаты |
---|---|
Флажки | win_Check |
Полосы прокрутки | win_SetScrollPos |
Поля редактирования | win_SetText |
Статический текст | win_SetText |
Списки | Все предикаты с префиксом lbох_ |
На следующем шаге мы рассмотрим операции рисования.