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

Определение диалоговых окон в файле ресурсов

Диалоговое окно можно определить непосредственно в файле ресурсов или в файле *.dlg , который следует подключить к файлу ресурсов директивой cinclude, а не известной директивой #include .

Это связано с тем, что компилятор ресурсов несколько иначе понимает директиву #include, чем препроцессор Си. Если директива #include помещается в файле описания ресурсов до первого (любого!) оператора, то препроцессор компилятора ресурсов игнорирует во включаемом файле все, кроме директив #define. То есть, если вы хотите включать в файл описания ресурсов файл описания окон диалога *.dlg, то следует помещать директиву #include как можно позже в файле описания ресурсов, но ни в коем случае не сразу за первой строкой :

#include < windows. h >

#include < about. dlg > // Неверно – описание окна about включено не будет

Приведем формат шаблона диалогового окна и его краткое описание :

MyBox DIALOG [опции загрузки] [опции памяти] X, Y, W, H

[STYLE ...]

BEGIN

( описание органов управления )

END

По аналогии с предыдущими определениями ресурсов оператор DIALOG определяет имя ресурса (в нашем случае My_Box) и устанавливает опции загрузки и опции памяти. Опции загрузки те же, что мы встречали ранее: PRELOAD либо LOADONCALL. При использовании PRELOAD описание окна диалога загружается с диска сразу при загрузке приложения на выполнение, а при использовании LOADONCALL только при необходимости. Опции памяти нам также уже знакомы – FIXED, MOVEABLE и DISCARDABLE. FIXED запрещает Windows перемещать сегмент данных с описанием ресурса в памяти, MOVEABLE разрешает, а DISKARDABLE указывает Windows что он может при необходимости удалять из памяти сегмент с описанием ресурса. Флаги MOVEABLE и LOADONCALL используются по умолчанию.

За опциями загрузки и памяти следует четыре параметра. Первые два из них – X и Y – задают координаты диалогового окна относительно рабочей области родительского окна. Следующие два параметра – W и H – определяют соответствующую ширину и высоту диалогового окна.

Отметим, что координаты и размеры диалогового окна задают не в пикселах, а в единицах, зависящих от размера системного шрифта. Координата X и ширина задаются в четвертях (1/4) ширины символов, а координата Y и высота – в восьмых (1/8) частях высоты символов. Такой подход гарантирует, что окна диалога будут выглядеть одинаково вне зависимости от типа видеоадаптера.

Следующее поле – STYLE – соответствует параметру «тип окна» в функции CreateWindow. Как правило, в модальных диалоговых окнах используют флаги WS_POPUP и WS_DLGFRAME. Однако можно использовать и другие. Например, вы можете указать в поле STYLE флаги WS_POPUP и WM_CAPTION. В этом случае создается диалоговое окно с заголовком и простой рамкой. Заголовок позволяет перемещать диалоговое окно по экрану при помощи мыши. Если используется флаг WM_CAPTION, то можно разместить в заголовке диалогового окна какой-нибудь текст, добавив утверждение CAPTION к заголовку шаблона. Например

MyBox DIALOG 12, 12, 130, 80

STYLE WS_POPUP | WM_CAPTION

CAPTION « Dialog Box Caption »

BEGIN {описание органов управления }

END

Если указан флаг WM_CAPTION, то, указав флаг WM_SYSMENU, можно добавить к диалоговому окну системное меню.

Если указать флаг WM_THICKFRAME, то диалоговое окно будет отображаться с широкой рамкой, что позволит пользователю изменять размеры диалогового окна, а это противоречит стилю Windows. Поэтому, как правило, этот флаг при описании диалогового окна не указывается.

При создании системного диалогового окна надо включить в поле STYLE флаг DS_SYSMODAL. Заметим, что если не указать поле STYLE , то по умолчанию для типа диалогового окна используются флаги WS_POPUP и WS_BORDER.

К диалоговому окну можно добавить меню. Для этого в шаблоне диалогового окна надо поместить следующее утверждение:

MENU my_menu

Здесь за оператором MENU должно быть указано имя меню, определенное ранее в файле ресурсов.

Органы управления диалогового окна определяются между ключевыми словами BEGIN и END. Возможно использование двух форматов :

control_type « text », nID, xPos, yPos, xWidth, yHeight, dwStyle

control_type nID, xPos, yPos, xWidth, yHeight, dwStyle

В обоих форматах на первом месте стоит параметр, определяющий тип органа управления. В представленной таблице указаны типы органов управления, которые можно использовать при описании диалогового окна, а также соответствующие им классы окон и флаги, установленные по умолчанию для параметра (dwStyle) формата описания органов управления. Кроме перечисленных в таблице флагов, для всех органов управления установлены флаги WS_CHILD и WS_VISIBLE.

Тип

Класс окна

Флаги

PUSHBUTTON

button

BS_PUSHBUTTON | WS_TABSTOP

DEFPUSHBUTTON

button

BS_DEFPUSHBUTTON | WS_TABSTOP

CHECKBOX

button

BS_CHECKBOX | WS_TABSTOP

RADIOBUTTON

button

BS_RADIOBUTTON

GROUPBOX

button

BS_GROUPBOX

LTEXT

static

SS_LEFT | WS_GROUP

CTEXT

static

SS_CENTER | WS_GROUP

RTEXT

static

SS_RIGHT | WS_GROUP

ICON

static

SS_ICON | WS_GROUP

EDITTEXT

edit

ES_LEFT | WS_BORDER | WS_TABSTOP

LISTBOX

listbox

LBS_NOTIFY | LBS_SORT |

WS_BORDER | WS_VSCROLL

Наиболее интересными с практической точки зрения являются флаги WS_GROUP и WS_TABSTOP. WS_TABSTOP устанавливается для всех органов управления диалогового окна, доступ к которым осуществляется посредством нажатия клавиши Tab. При этом фокус ввода при каждом нажатии на клавишу табуляции будет переходить к следующему органу управления, имеющему установленный флаг WS_TABSTOP.

Флаг WS_TABSTOP установлен по умолчанию для органов управления типа PUSHBUTTON, DEFPUSHBUTTON, CHECKBOX, RADIOBUTTON, EDITTEXT.

Флаг WS_GROUP позволяет использовать клавиши перемещения курсора для передачи фокуса ввода от одного органа управления к другому внутри группы. По умолчанию флаг WS_GROUP установлен для органов управления типа LTEXT, CTEXT, RTEXT, ICON. Органы управления перечисленных типов указывают на конец группы.

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

Поле nID в форматах описания органов управления используется органом управления , когда от него поступает сообщение в родительское окно. Как правило, это сообщение WM_COMMAND, а параметр wParam равен nID. Сообщение от органа управления передается сначала функции окна Windows, а затем уже функции диалогового окна . Если орган управления не должен передавать сообщений функции диалогового окна , то можно присвоить полю nID значение -1.

Поле «text» в первом формате задает заголовок органа управления. Для получения большей информации об этом поле можете вернуться к главе «Органы управления».

Четыре поля : xPos, yPos, xWidth, yHeight,-- определяют координаты и размеры органа управления внутри диалогового окна. Как и поля X, Y, W и H в заголовке шаблона диалогового окна, они задаются не в пикселах, а в долях символов системного шрифта.

После описания окна диалога в файле ресурсов вы должны обеспечить пользователю возможность вызвать это окно посредством выбора соответствующего пункта меню.