Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Модальные диалоговые окна и класс CDialog

Читайте также:
  1. Cоциальный паспорт класса
  2. II. Классификация переводческих ошибок
  3. II. О месте классических языков в духовной школе.
  4. II. Отнесение опасных отходов к классу опасности для окружающей природной среды расчетным методом
  5. II. Характеристика основных этапов проведения внеклассного мероприятия
  6. II. Цели и задачи организации учебно-воспитательной работы кадетского класса
  7. III. Организация деятельности кадетского класса

В процессе создания модального диалогового окна выделяются три этапа:

1) Разработка шаблона диалогового окна, описывающего внешний вид окна и его элементов управления.

2) Создание объекта класса или подкласса CDialog, являющегося оболочкой для шаблона диалогового окна.

3) Вызов функции-члена CDialog::DoModal для вывода окна на экран.

 

1. Шаблон диалогового окна

Первый шаг в создании диалогового окна – разработка шаблона. В нем описываются основные характеристики окна, начиная от его размеров, до свойств элементов управления. Хотя можно создавать шаблон окна программно, обычно они хранятся в виде ресурсов приложения, скомпилированных по содержимому RC-файла.

В качестве примера приведен шаблон диалогового окна с идентификатором ресурса IDD_MYDIALOG. В этом окне есть 4 ЭУ: строка ввода, статический элемент-метка строки ввода, кнопка OK и кнопка Отмена:

IDD_MYDIALOG DIALOG 0, 0, 160, 68

STYLE DS_MODALFRAME ¦ WS_POPUP ¦ WS_VISIBLE ¦ WS_CAPTION ¦ WS_SYSMENU

CAPTION "Введите свое имя"

FONT 8, "MS Sans Serif"

BEGIN

LTEXT "&Имя", -1, 8, 14, 24, 8

EDITTEXT IDC_NAME, 34, 12, 118, 12, ES_AUTOHSCROLL

DEFPUSHBUTTON "OK", IDOK, 60, 34, 40, 14, WS_GROUP

PUSHBUTTON "Отмена", IDCANCEL, 112, 34, 40, 14, WS_GROUP

END

Все координаты и размеры задаются в единицах диалогового окна (dialog box units).

Вручную такие описания диалоговых окон делаются очень редко. В среде Visual C++ команда меню Insert ⇒ Resource позволяет добавить в проект пустой шаблон диалогового окна и затем отредактировать его в редакторе ресурсов. На рисунке показано окно редактора диалоговых окон, встроенного в Visual C++. Элементы управления можно выбирать в панели инструментов Controls и "рисовать" их в диалоговом окне (если панель инструментов Controls отсутствует на экране, ее можно включить командой меню Tools ⇒ Customize ⇒ Toolbars). Свойства диалогового окна (заголовок, шрифт, стиль) и свойства ЭУ доступны в окнах свойств, вызываемых командой Properties из контекстных меню.

 

Для всех, за исключением самых примитивных, диалоговых окон, кроме разработки шаблона требуется описать класс-оболочку как подкласс CDialog. В этом подклассе надо реализовать поведение конкретного окна. В целом, у подклассов CDialog часто перегружаются три виртуальные функции: инициализация элементов управления (OnInitDialog) и обработчики кнопок OK (OnOK) и Отмена (OnCancel).

При создании диалогового окна оно получает сообщение WM_CREATE, как и любое другое окно. Но в момент получения WM_CREATE в диалоговом окне еще не созданы ЭУ, описанные в шаблоне окна. Поэтому их нельзя проинициализировать в обработчике данного сообщения. Внутренняя оконная процедура диалоговых окон Windows обрабатывает сообщение WM_CREATE, как раз чтобы выполнить создание ЭУ. После того, как все они созданы, диалоговому окну посылается сообщение WM_INITDIALOG, чтобы окно смогло произвести необходимую инициализацию ЭУ. В подклассах CDialog сообщение WM_INITDIALOG приводит к вызову функции-члена OnInitDialog:

virtual BOOL OnInitDialog()

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

Чтобы по нажатию кнопок OK и Отмена вызывались виртуальные функции CDialog::OnOK и OnCancel, у этих кнопок в шаблоне окна должны быть идентификаторы IDOK и IDCANCEL.

Вполне возможно добавить в проект подкласс CDialog вручную, но эта типичная операция выполняется гораздо быстрее с помощью ClassWizard. Сначала надо вызвать его командой меню View ⇒ ClassWizard, нажать кнопку Add Class, выбрать из появившегося меню вариант New и заполнить окно с параметрами нового класса. В нем надо указать имя класса, имя базового класса (CDialog), и идентификатор ресурса для шаблона окна.

3. Создание модального диалогового окна

После того, как вы разработали шаблон диалогового окна и объявили подкласс CDialog, для создания и вывода модального диалогового окна осталось немного: создать объект вашего подкласса CDialog и вызвать у него функцию-член DoModal. DoModal вернет управление только после закрытия диалогового окна. В качестве возвращаемого значение будет передан параметр функции EndDialog. Конструктору CDialog в качестве параметров передается идентификатор ресурса шаблона и указатель на окно-владельца диалогового окна. Обычно в подклассах MFC заводится конструктор, который можно использовать вообще без параметров, например:

CMyDialog::CMyDialog(CWnd* pOwnerWnd = NULL):

CDialog(IDD_MYDIALOG, pOwnerWnd) {}

Такой конструктор позволяет создать и вызвать диалоговое окно всего двумя операторами:

CMyDialog dlg;

if (dlg.DoModal() == IDOK)

{

// Пользователь нажал кнопку OK

 

 

Разработка диалоговых окон для ввода данных. Реализация простого диалогового окна About. Использование переключателей для выбора графических образов с помощью диалогового окна. Использование диалогового окна для ввода текста и целых чисел. Использование д


Дата добавления: 2015-09-03; просмотров: 146 | Нарушение авторских прав


Читайте в этой же книге: Простое приложение Windows. Оболочка для всех приложений. Эффективное использование описателей. Компоненты приложения Windows. Функция WinMain(). Регистрация класса окна. | Простое приложение Windows. style. lpfnWndProc. cbClsExtra. cbWndExtra. hinstance. hIсоn. hCursor. hbrBackground. IpszMenuName. IpszClassName. | Создание окна с помощью функции CreateWindow | Приложение с циклом обработки сообщений | Оконные классы | То получим внутри прямоугольника эллипс. | Добавление курсоров | Добавление битовых образов | Разработка ресурсов меню и акселераторов клавиатуры. Файл заголовков (resource.h). Файл ресурсов (MENU3.RC). Файл приложения (MENU3.CPP). | Idefine IDM_AFILES 501 Idefine IDMJ3FILES 502 Idefine IDM_CFILES 503 Idefine IDM DFILES 504 |
<== предыдущая страница | следующая страница ==>
FindClose(hFindFile);| Схема последовательного технологического процесса

mybiblioteka.su - 2015-2024 год. (0.006 сек.)