лекции / Shchupak_Yu._Win32_API_Razrabotka_prilozheniy_dlya_Windows
.pdf
Быстрые клавиши |
301 |
|
|
|
|
СОВЕТ
Теоретически, можно определить быструю клавишу почти для каждой виртуальной или символьной клавиши в сочетании с клавишами Shift, Ctrl или Alt. Однако надо избегать использования тех быстрых клавиш, которые имеют традиционное применение во многих приложениях Windows. Например, F1 обычно используется для вызова контекстной справки, а клавиши F4, F5 и F6 — для специальных функций многооконного интерфейса приложений. Нежелательно назначать быстрыми клавишами клавиши Tab, Enter, Esc и Spacebar, поскольку они часто используются для системных функций. Например, Alt+F4 закрывает приложение или окно, Alt+Tab переключает на следующее окно, а Ctrl+Esc вызывает меню Старт.
Описанная процедура определения строки в таблице быстрых клавиш повто ряется для задания информации о каждой быстрой клавише в обрабатываемом меню. После этого определенный ресурс сохраняется в файле описания ресурсов.
Загрузка таблицы быстрых клавиш
Во время работы программы для загрузки таблицы быстрых клавиш в память и получения ее дескриптора используется функция LoadAccelerators:
HACCEL LoadAccelerators |
( |
HINSTANCE hInstance, |
// дескриптор экземпляра приложения |
LPCTSTR lpTableName |
// имя таблицы быстрых клавиш |
); |
|
Для передачи второму параметру имени таблицы IDR_ACCELERATOR1, назначен ного редактором ресурсов, необходимо использовать макрос MAKEINTRESOURCE.
В случае успешного выполнения функция возвращает дескриптор таблицы бы стрых клавиш. В случае неудачного завершения функция возвращает значение NULL.
Модификация цикла обработки сообщений
Для обработки быстрых клавиш приложение должно перехватывать сообщения клавиатуры, анализировать их коды и в случае совпадения с кодом, определенным в таблице быстрых клавиш, направлять соответствующее сообщение в оконную процедуру главного окна. Все это может выполнить функция TranslateAccelerator:
int TranslateAccelerator (
HWND hWnd, |
// дескриптор окна – получателя сообщения |
|
HACCEL hAccTable, // дескриптор таблицы быстрых |
клавиш |
|
LPMSG lpMsg |
// указатель на структуру MSG |
|
);
Функция преобразует сообщение WM_KEYDOWN или WM_SYSKEYDOWN1 в сообще ние WM_COMMAND или WM_SYSCOMMAND, если таблица акселераторов содержит соот ветствующий код виртуальной клавиши (с учетом состояния клавиш Ctrl, Altи Shift).
Сформированное сообщение, содержащее идентификатор быстрой клавиши в младшем слове параметра wParam, отправляется непосредственно в оконную про цедуру, минуя очередь сообщений. Возврат из функции TranslateAccelerator проис ходит только после того, как оконная процедура обработает посланное сообщение.
Если функция TranslateAccelerator возвращает ненулевое значение, это зна чит, что преобразование комбинации клавиш и обработка отправленного сооб щения завершились успешно. В этом случае приложение не должно повторно
1 Сообщения клавиатуры рассматривались в главе 4.
302 |
Глава 6. Меню и быстрые клавиши |
|
|
обрабатывать эту комбинацию клавиш при помощи функций TranslateMessage
и DispatchMessage.
Данное требование можно выполнить, если применяемый до сих пор традици онный цикл обработки сообщений
while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg);
}
преобразовать к следующему виду:
while (GetMessage(&msg, NULL, 0, 0)) {
if (!TranslateAccelerator(hMainWnd, hAccel, &msg)) { TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
где hMainWnd — дескриптор главного окна приложения.
Приложение MenuDemo3
Приложение MenuDemo3 является улучшенной версией приложения MenuDemo1. Оно выполняет те же функции и имеет точно такое же меню, но теперь программа позволяет использовать быстрые клавиши, дублирующие некоторые команды меню. Дублируемые пункты меню и соответствующие им быстрые клавиши пе речислены в табл. 6.11.
Таблица 6.11. Спецификации быстрых клавиш для программы MenuDemo3
Подменю |
Имя пункта |
Идентификатор |
Быстрая клавиша |
|
|
|
|
File |
&Open… |
IDM_OPEN |
Ctrl+O |
|
Sa&ve… |
IDM_SAVE |
Ctrl+S |
Shape |
&Rectangle |
ID_RECTANGLE |
F2 |
|
Rhom&b |
ID_RHOMB |
F3 |
|
&Ellipse |
ID_ELLIPSE |
F4 |
Color |
&Red |
ID_RED |
Ctrl+R |
|
&Green |
ID_GREEN |
Ctrl+G |
|
&Blue |
ID_BLUE |
Ctrl+B |
|
&Dark |
ID_DARK |
F10 |
|
&Medium |
ID_MEDIUM |
F11 |
|
&Light |
ID_LIGHT |
F12 |
|
|
|
|
Создайте новый проект с именем MenuDemo3. Скопируйте из папки проекта MenuDemo1 в папку проекта MenuDemo3 файлы с расширениями .cpp, .h и .rc, скор ректировав их имена заменой MenuDemo1 на MenuDemo3. Добавьте скопированные файлы в состав проекта. В окне Workspace перейдите на вкладку ResourceView и вызовите редактор меню, сделав двойной щелчок мышью на значке IDR_MENU1. Теперь следует отредактировать пункты меню, указанные в табл. 6.11, добавив к имени каждого пункта символьную строку \t<обозначение быстрой клавиши>, взяв обозначения быстрых клавиш из четвертого столбца табл. 6.11.
Вызовите редактор таблицы быстрых клавиш. Определите быстрые клавиши, используя информацию из третьего и четвертого столбцов табл. 6.11. Для функ
Быстрые клавиши |
303 |
|
|
|
|
циональных клавиш F2, F3 и им подобных в поле Key следует указывать идентифи каторы VK_F2, VK_F31 и т. д. Также следует сбросить флажок Ctrl.
Исходный код файла MenuDemo3.cpp приведен в листинге 6.3.
Листинг 6.3. Проект MenuDemo3
//////////////////////////////////////////////////////////////////////
// MenuDemo3.cpp
#include |
<windows.h> |
|
#include |
<stdio.h> |
|
#include |
"KWnd.h" |
|
#include |
"resource.h" |
|
#define W |
200 |
// ширина фигуры |
#define H |
140 |
// высота фигуры |
enum ShapeSize { MAX, MIN }; |
||
typedef struct { |
|
|
int id_shape; |
// идентификатор фигуры |
|
BOOL fRed; |
// компонент красного цвета |
|
BOOL fGreen; |
// компонент зеленого цвета |
|
BOOL fBlue; |
// компонент синего цвета |
|
int id_bright; |
// идентификатор яркости цвета |
|
} ShapeData; |
|
|
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //==================================================================== int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HACCEL hAccel; MSG msg;
KWnd mainWnd("MenuDemo3", hInstance, nCmdShow, WndProc, MAKEINTRESOURCE(IDR_MENU1), 100, 100, 400, 300);
// Загрузка таблицы быстрых клавиш
hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));
while (GetMessage(&msg, NULL, 0, 0)) {
//Если сообщение не от быстрой клавиши,
//то выполнить стандартную обработку
if (!TranslateAccelerator(mainWnd.GetHWnd(), hAccel, &msg)) { TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
//====================================================================
LRESULT CALLBACK WndProc(HWND |
hWnd, |
UINT uMsg, WPARAM wParam, LPARAM lParam) |
{ |
|
|
/* Текст функции из листинга |
6.1 |
*/ |
} |
|
|
//////////////////////////////////////////////////////////////////////
Откомпилируйте проект и протестируйте программу MenuDemo3.exe, вызывая команды меню с помощью быстрых клавиш.
1 Коды виртуальных клавиш приведены в табл. 4.3 (глава 4).
304 |
Глава 7. Диалоговые окна |
7Диалоговые окна
Диалоговые окна, или окна диалога (dialog box), являются одним из важнейших элементов графического интерфейса пользователя Windows приложений. Обыч но диалоговые окна используются для ввода пользователем дополнительной ин формации, а также для вывода результатов работы приложения.
Диалоговое окно имеет вид всплывающего окна с одним или несколькими эле ментами управления (controls), которые являются для него дочерними окнами. Используя элементы управления, пользователь вводит текст, выбирает указан ные опции (флажки, переключатели, элементы списка) и нажимает кнопки, вы зывающие различные действия приложения.
От обычных окон диалоговые окна отличаются тем, что они создаются на базе предопределенного в Windows класса диалоговых окон. Оконная процедура этого класса, спрятанная в недрах Windows, обеспечивает обработку сообщений, посту пающих в диалоговое окно, а также задает специфическое поведение элементов управления диалогового окна. Например, она управляет передачей фокуса ввода от одного элемента другому или переносит фокус ввода между группами элемен тов при нажатии клавиши Tab. Эту невидимую для программиста оконную проце дуру иногда называют менеджером диалогового окна (dialog box manager).
Менеджер диалогового окна передает многие сообщения в функцию, опреде ленную в вашем приложении, которая называется процедурой диалогового окна, или просто диалоговой процедурой (dialog procedure). Эта процедура похожа на обычную оконную процедуру, но все же имеет некоторые важные особенности, которые будут рассмотрены ниже.
Второе отличие диалоговых окон от обычных окон состоит в том, что они все гда связаны с шаблоном диалога, содержащим размеры окна, состав и расположе ние элементов управления. Шаблон диалогового окна можно определить двумя способами: а) в файле описания ресурсов, используя редактор диалоговых окон, б) создавая шаблон в памяти в процессе работы приложения. В книге рассматри вается только первый способ, благо он наиболее простой и распространенный.
Типы диалоговых окон
Диалоговые окна бывают модальные (modal) и немодальные (modeless). Они раз личаются по влиянию на дальнейшее выполнение программы.
Элементы управления в диалоговом окне |
305 |
|
|
|
|
Когда в программе вызывается модальное диалоговое окно, оно ожидает выпол нения некоторого действия со стороны пользователя, прежде чем программа смо жет продолжить свое выполнение. Пользователь не может переключиться между диалоговым окном и другими окнами программы. Он должен явно закрыть диало говое окно, что обычно делается щелчком на кнопке OK или Cancel. Однако пользо ватель может переключаться в другие программы, не закрыв диалоговое окно.
Существует также специальный вид модальных диалоговых окон — систем ные модальные (system modal) окна, которые не позволяют переключаться даже в другие программы. Они сообщают о серьезных проблемах, и пользователь дол жен закрыть системное модальное окно, чтобы продолжить работу в Windows.
Немодальное диалоговое окно не приостанавливает выполнение программы. Оно может получать и терять фокус ввода. Это значит, что пользователь может свободно переключаться между диалоговым окном и другими окнами програм мы. Окна этого типа предпочтительней использовать в тех случаях, когда они содержат элементы управления, которые должны быть в любой момент доступ ны пользователю.
Элементы управления в диалоговом окне
Основную функциональную нагрузку в диалоговом окне выполняют элементы управления. Все версии Windows поддерживают так называемые базовые элемен ты управления, перечисленные в табл. 7.1.
Таблица 7.1. Базовые элементы управления
Элемент управления |
Описание |
Предопределенный |
|
|
оконный класс |
|
|
|
Рисунок (Picture control) |
Элемент управления, отображающий пус- |
STATIC |
|
тую прямоугольную рамку, закрашенную |
|
|
прямоугольную область или растровый образ |
|
Надпись (Static text) |
Текстовая строка. Обычно используется как |
STATIC |
|
метка (поясняющая надпись) рядом с полем |
|
|
ввода или элементом управления другого |
|
|
типа. Может применяться как самостоятель- |
|
|
ная информационная надпись |
|
Рамка (Group box) |
Прямоугольная рамка с надписью, использу- |
BUTTON |
|
емая для группирования набора связанных |
|
|
элементов управления |
|
Кнопка (Button) |
Элемент, который пользователь «нажимает», |
BUTTON |
|
чтобы выполнить какое-либо действие |
|
Флажок (Check box) |
Элемент, который может быть либо установ- |
BUTTON |
|
лен, либо сброшен для выбора или отмены |
|
|
опции, которая не связана с другими опциями |
|
Переключатель |
Элемент, используемый для выбора одной из |
BUTTON |
(Radio button) |
группы взаимоисключающих опций. В группе |
|
|
переключателей может быть выбран только |
|
|
îäèí èç íèõ |
|
Список (List box) |
Прямоугольное окно со списком элементов |
LISTBOX |
|
(строк), из которого пользователь может выб- |
|
|
рать любой элемент |
|
|
|
|
|
|
продолжение |
306 |
Глава 7. Диалоговые окна |
|
|
|
|
Таблица 7.1. (продолжение) |
|
|
|
|
|
Элемент управления |
Описание |
Предопределенный |
|
|
оконный класс |
|
|
|
Окно редактирования |
Прямоугольное окно для ввода текста с кла- |
EDIT |
или текстовое поле |
виатуры. Элемент предоставляет определен- |
|
(Edit box) |
ные средства редактирования текста |
|
Комбинированный список |
Элемент, объединяющий список с окном ре- |
COMBOBOX |
(Combo box) |
дактирования |
|
Полоса прокрутки |
Элемент управления линейкой прокрутки |
SCROLLBAR |
(Scroll bar) |
|
|
|
|
|
Начиная с Windows 95, в системе используется библиотека элементов управ ления общего пользования (common control library). Новые элементы управления, включенные в эту библиотеку, дополняют базовые элементы управления и позво ляют придать приложениям более совершенный вид. Работа с элементами управ ления общего пользования рассматривается в следующей главе.
Обычно элементы управления определяются в шаблоне диалогового окна на языке описания шаблона диалога. В случае создания шаблона с помощью редакто ра диалоговых окон эти определения элементов генерируются автоматически. Одним из атрибутов описания элемента управления в шаблоне диалога является
идентификатор элемента управления.
Каждый элемент управления, описанный в шаблоне диалога, реализуется Windows в виде окна соответствующего класса. Это окно является дочерним ок ном по отношению к диалоговому окну. Как всякое окно, оно идентифицируется своим дескриптором типа HWND. Вместо термина «дескриптор окна элемента уп равления» в документации (MSDN) обычно используется более короткий тер мин «дескриптор элемента управления».
Если элемент управления определен в шаблоне диалога, то программисту из вестен только его идентификатор. В то же время многие функции, работающие с элементом управления, принимают в качестве параметра его дескриптор. Для получения дескриптора элемента управления по его идентификатору использу ется функция GetDlgItem:
HWND GetDlgItem ( |
|
|
|
HWND hDlg, |
// |
дескриптор диалогового |
îêíà |
int nIDDlgItem |
// |
идентификатор элемента |
управления |
); |
|
|
|
В случае успешного завершения функция возвращает дескриптор элемента управления, в случае ошибки — значение NULL.
Иногда возникает необходимость обратного преобразования, чтобы по деск риптору элемента управления определить его идентификатор. Такую проблему решает вызов функции GetDlgCtrlID:
int GetDlgCtrlID ( |
|
HWND hwndCtl |
// дескриптор элемента управления |
); |
|
Ранее было сказано, что элементы управления обычно определяются в шаблоне диалогового окна. Существует, однако, и альтернативный способ создания и разме щения элемента управления при помощи функции CreateWindiow, первому параметру которой передается имя предопределенного оконного класса (см. табл. 1.7 в главе 1). Но такой подход используется гораздо реже.
Создание и обработка диалогового окна |
307 |
|
|
|
|
Элементы управления могут быть разрешенными (enabled) или запрещенными (disabled). По умолчанию все элементы управления имеют статус разрешенных элементов. Запрещенные элементы выводятся на экран серым цветом и не вос принимают пользовательский ввод с клавиатуры или от мыши. Изменение стату са элементов управления осуществляется при помощи функции EnableWindow.
Создание и обработка диалогового окна
Создание диалогового окна и работа с ним требуют выполнения следующей пос ледовательности действий:
1.Определение шаблона диалогового окна.
2.Определение диалоговой процедуры.
3.Вызов функции создания диалогового окна.
4.Обмен данными между диалоговой процедурой и вызывающей функцией окна.
Реализация некоторых шагов различается для модальных и немодальных диа логовых окон.
Шаблон диалогового окна
Определение шаблона диалогового окна в файле описания ресурсов имеет следу ющий вид:
имя_диалога DIALOG DISCARDABLE x, y, width, height [ опции_диалога ]
BEGIN
Определение элементов диалогового окна
END
Имя_диалога интерпретируется Windows либо как C строка с завершающим нулевым символом, либо как целочисленный идентификатор. Правила интер претации такие же, как и для имени пиктограммы в файле описания ресурсов (см. главу 5).
Параметры x, y, width, height задают позицию и размеры диалогового окна. Коор динаты x, y измеряются относительно левого верхнего угла окна, из которого выз вано диалоговое окно. Все координаты и размеры задаются не в пикселах, а в спе циальных шаблонных единицах диалогового окна.
Опции диалога — это необязательные инструкции, в которых можно указы вать значения STYLE, CAPTION, FONT и многие другие параметры.
Инструкция STYLE напоминает параметр dwStyle функции CreateWindow. Для мо дальных окон диалога обычно используются флаги WS_POPUP и WS_DLGFRAME.
Инструкция CAPTION применяется для объявления диалоговых окон, которые имеют стиль WS_CAPTION. Наличие заголовка позволяет пользователям переме щать окно по экрану. Заголовок может также служить напоминанием о том, какое действие выполняется в этом окне.
Синтаксис описания элементов диалогового окна зависит от типа элементов. Нет нужды более подробно рассматривать язык описания шаблона диалогового окна, так как это описание создается автоматически при работе с редактором диа логовых окон.
308 |
Глава 7. Диалоговые окна |
|
|
Шаблонная система единиц
В описании шаблона диалогового окна применяется специальная шаблонная систе ма единиц. Размеры и расположение диалогового окна, задаваемые в параметрах x, y, width, height, а также всех элементов управления должны быть указаны в единицах этой системы, называемых также шаблонными единицами (dialog template units).
Шаблонные единицы определяются отдельно по горизонтали и по вертикали через ширину и высоту используемого в диалоговом окне шрифта. Одна шаблон ная единица по горизонтали составляет четверть средней ширины символов ис пользуемого шрифта. Одна шаблонная единица по вертикали составляет восьмую часть высоты символов.
По умолчанию в диалоговом окне используется системный шрифт. Поскольку высота символов системного шрифта примерно вдвое больше его ширины, то раз меры делений по осям X и Y примерно одинаковы.
Среднюю ширину и высоту символов для системного шрифта можно опреде лить с помощью функции GetDialogBaseUnits. Она возвращает 32 разрядное значе ние, младшее слово которого равно средней ширине символов в пикселах (baseunitX), а старшее слово — высоте символов в пикселах (baseunitY). Таким образом, для пересчета шаблонных единиц templateunitX, templateunitY в пикселы можно вос пользоваться следующими выражениями:
pixelX = templateunitX * baseunitX / 4; pixelY = templateunitY * baseunitY / 8;
Подобная система единиц измерения позволяет операционной системе пра вильно масштабировать диалоговое окно независимо от размера шрифта, уста новленного в настройках экрана.
По умолчанию Windows использует «мелкий шрифт» (96 точек на дюйм). В этом режиме функция GetDialogBaseUnits возвращает значения baseunitX = 8, baseunitY = 16.
Но пользователь может выбрать более крупный шрифт. Для смены шрифта нужно щелкнуть правой кнопкой мыши на поверхности рабочего стола и в по явившемся диалоговом окне Свойства: Экран нажать кнопку Дополнительно…, а за тем в окне Свойства перейти на вкладку Общие. Комбинированный список Размер шрифта позволяет выбрать другой шрифт.
Если пользователь выберет «крупный шрифт» (120 точек на дюйм) и переза грузит систему, чтобы новые параметры вступили в силу, то после этого функция
GetDialogBaseUnits будет возвращать значения baseunitX = 10, baseunitY = 20. Windows автоматически увеличит размеры диалоговых окон, и поэтому все текстовые над писи по прежнему будут размещены правильно.
Применяемая шаблонная система единиц дает еще одну возможность управ ления видом и размерами диалогового окна на стадии описания шаблона. Для этого достаточно в параметрах диалога выбрать другой шрифт при помощи инст рукции FONT.
Модальный диалог
Техника добавления к приложению простейшего модального диалогового окна будет рассмотрена на примере разработки приложения DlgDemo1.
Модальный диалог |
309 |
|
|
|
|
Приложение DlgDemo1 является модификацией программы MenuDemo1, кото рая была рассмотрена в предыдущей главе. Напомним, что в этой программе при выборе пункта меню About… вызывается функция MessageBox для вывода окна сообщений, содержащего информационный текст. Окно сообщений тоже являет ся модальным диалоговым окном, но всю заботу о его создании и обработке берет на себя Windows. Но есть и обратная сторона подобной простоты создания ин формационного окна. Возможности программиста повлиять на внешний вид и со держимое подобного окна очень ограничены.
В приложении DlgDemo1 при выборе пункта меню About… будет вызываться настоящее модальное диалоговое окно, вид и поведение которого полностью оп ределяются программистом. В остальном приложение DlgDemo1 должно работать так же, как и приложение MenuDemo1.
Как обычно, сначала следует создать новый проект с именем DlgDemo1. Скопи руйте из папки проекта MenuDemo1 (см. листинг 6.1) в папку проекта DlgDemo1 файлы с расширениями .cpp, .h и .rc, скорректировав их имена заменой MenuDemo1 на DlgDemo1. Добавьте эти файлы в состав проекта.
Откройте в окне редактирования файл recource.h и замените в его тексте стро ку комментария
// Used by MenuDemo1.rc
следующей строкой:
// Used by DlgDemo1.rc
Модификацию программы начнем с определения шаблона диалогового окна.
Вызов и использование редактора диалоговых окон
В главном меню Visual Studio выполните команду Insert Resource. В появившем ся окне Insert Resource выберите тип ресурса Dialog и нажмите кнопку New. В ре зультате будет открыто окно редактора диалоговых окон с формой нового окна (рис. 7.1). Изначально в нем есть только кнопки OK и Cancel.
Рис. 7.1. Заготовка диалогового окна в окне редактора диалоговых окон
Также в окне приложения Visual Studio справа должна появиться панель ин струментов Controls (рис. 7.2). Эта панель содержит кнопки для создания элемен тов управления всех типов, которые можно добавлять в диалоговое окно.
310 |
|
|
|
|
|
|
|
|
Глава 7. Диалоговые окна |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 7.2. Панель инструментов Controls
Если по каким то причинам панель инструментов Controls не появится, то нужно щелкнуть правой кнопкой мыши на пустом месте окна Visual Studio и в открыв шемся контекстном меню выбрать пункт Controls.
Проектирование шаблона диалогового окна начинается с установки его свойств. Чтобы вызвать диалоговое окно Dialog Properties (рис. 7.3), нужно сделать двой ной щелчок левой кнопкой мыши на форме диалога. Это окно можно вызвать и другим способом, щелкнув на форме правой кнопкой мыши и выбрав во всплыв
шем контекстном меню пункт Properties.
Ðèñ. 7.3. Îêíî Dialog Properties
Введите в поле ID идентификатор IDD_ABOUT, а в поле Caption — текст About
DlgDemo1.
Кнопка Font…предназначена для вызова диалога, позволяющего выбрать шрифт, но сейчас можно оставить шрифт, используемый по умолчанию (MS Sans Serif, раз мер 8). Другие параметры диалогового окна тоже можно оставить в стандартном варианте. Если переключиться на вкладку Styles, то можно увидеть, что по умолча нию используются стиль Popup и тип рамки Dialog Frame, а также включены отметки флажков Title bar и System menu. После установки необходимых параметров окно свойств диалога нужно закрыть.
Теперь займемся «начинкой» диалогового окна. Мы хотели бы поместить ка кой нибудь рисунок слева на форме, затем отобразить необходимые информаци онные надписи, а в правом нижнем углу расположить кнопку OK.
С помощью мыши увеличьте размеры формы примерно в полтора раза. Удали те кнопку Cancel. Чтобы удалить элемент управления, достаточно выделить его мышью и нажать клавишу Delete.
