Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры к экзамену ВизСр.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
242.18 Кб
Скачать
  1. Модальные и немодальные диалоговые окна. Работа с немодальными диалоговыми окнами.

Диалоговое окно - это дочернее окно главного окна приложения, которое применяется как для отображения информации о состоянии приложения, так и для ввода пользователем новых данных. Существует два типа диалоговых окон. Модальное диалоговое окно получает управление интерфейсом приложения и удерживает его до тех пор, пока его не закроет пользователь. Немодальные диалоговые окна применяются реже. Окно такого типа не монополизирует управление приложением и, оставаясь открытым, позволяет работать с несколькими окнами приложения одновременно.

Последовательность создания диалогового окна включает следующие шаги:

  1. проектирование в редакторе диалога шаблона диалогового окна с включением в него всех требуемых элементов управления и настройки их свойств;

  2. создание класса, производного от CDialog, с описанием в нем переменных и обработчиков событий, а также указанием используемого шаблона диалога;

  3. определение для каждого элемента управления переменной или объекта, используемых для доступа к значению данного элемента управления;

  4. определение необходимых методов обработчиков событий для каждого элемента управления;

  5. создание объекта разработанного производного класса диалога (фактически вызов конструктора) и создание диалогового окна:

    Для модального диалога

    Для немодального диалога

    вызов конструктора с параметром, указывающим ID шаблона диалога

    вызов конструктора без параметра шаблона диалога

    вызов метода DoModal

    вызов метода Create с параметром, указывающим ID шаблона диалога

  6. переопределение метода OnInitDialog и включение в него вызова метода базового класса и необходимых действий по инициализации диалогового окна.

  1. Архитектура Document-View.

Архитектура Документ-Вид означает приблизительно следующее. У вас есть один класс, который отвечает за данные, и второй класс, который отвечает за представление этих данных на экране. Таким образом эти два класса разделяют обязанности, и каждый отвечает за свою собственную часть работы. При этом у одного документа может быть несколько видов. Класс документа отвечает за такие вещи, как хранение данных, за сохранение их на диске и чтение с диска и др., класс же вида за представление данных на экране (прорисовка, обновление и т. п.).

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

Пример номер два. Программа - часы. Она просто показывает время. Но при этом собственно данные (текущее время и т. п.) лучше хранить отдельно от представления их на экране (например, потому, что ваши часы вы можете показывать в разных видах - в виде часов со стрелками, в виде электронных часов с цифрами и т. п.).

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

Когда вы начинаете делать свое приложение с использованием AppWizard, то на шаге 1 мастера вы задаете, будет ли или нет использоваться архитектура Документ-Вид: однодокум или многодокум интерф.

Отметим, то CView - это оконный класс (потомок класса CWnd), а CDocument - нет.

В вашей программе класс документа - это потомок класса CDocument, а класс вида проиходит от класса CView непосредственно или через другие классы. Предка для вашего класса Вида вы можете выбрать на шаге 6 AppWizard'а. (а также когда пользователь выбирает команды Open и New в меню File.)

  1. Управляющие элементы. Расширение возможностей пользовательского интерфейса.

  1. Управляющие элементы. Работа с флажками и переключателями. Работа со списками.

  1. Элементы управления общего назначения (линейный индикатор, календарь и т.д.).

  1. Графика в Visual C++.

  2. Методы для рисования линий и фигур в MFC.

  3. Создание простейших графических объектов.

Для вывода графической информации существует набор функций, которые можно разделить на несколько категорий:

Методы рисования линий: LineTo, MoveTo, Polyline, Arc, ArcTo, PolyBezier, и др.

Методы рисования замкнутых фигур: Ellipse, Rectangle, Polygon, Pie, Chord и др.

Методы вывода текста: TextOut, DrawText и т.д.

Функции работы с растровым изображением: GetPixel, SetPixel, FloodFill, BitBlt и т.д.

Существует отдельная категория функций работы с DC по переключению режимов и установке параметров вывода графической информации. Часть из них устанавливается напрямую через определенные функции (например, SetBkColor), часть - с помощью специальных графических объектов:

перо (pen)

- задает режим вывода линий (цвет, толщина, стиль);

кисть (brush)

- регулирует режим закраски фигур (цвет, стиль);

шрифт (font)

- задает свойства шрифта, которым выводится текст;

палитра (palette)

- задает набор используемых в DC цветов;

область (region)

- используются для задания clipping regions - областей отсечения, вне которых вывод графики блокируется.

Работа с графическими объектами производится с помощью их дескрипторов (handles) - HDC, HPEN, HBRUSH, HFONT и т.д. Создание и удаление объектов производится с помощью соответствующих функций - например, объект pen создается с помощью CreatePen, удаляется с помощью DeleteObject. Режимы, задающиеся через графические объекты, переключаются с помощью создания новых объектов и указания контексту (DC) использовать их для вывода графики. Это делается помощью функции SelectObject:

//hdc - дескриптор контекста устройства

HPEN hWhitePen, hBlackPen, hOldPen;

HBRUSH hBlackBrush, hOldBrush;

hWhitePen = CreatePen(PS_SOLID, 1, RGB(255, 255, 255));

hBlackPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));

hBlackBrush = CreateSolidBrush(RGB(0, 0, 0));

// нарисовать белый квадрат

hOldPen = SelectObject(hdc, hWhitePen);

MoveTo(hdc, 10, 10);

LineTo(hdc, 100, 10);

LineTo(hdc, 100, 100);

LineTo(hdc, 10, 100);

LineTo(hdc, 10, 10);

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