Лекция 1. Особенности создания приложений под Windows в среде Visual C++ 6.0 с использованием MFC классов
Якунин М.С

[На главную страницу сайта] [Другие темы раздела] [Содержание курса] [Лабораторная работа к лекции] [Скачать задачи] [Следующая лекция]

Методические рекомендации

  1. Так как это первая тема, и в ней встречается очень много новых, для учащихся, терминов то все сказанное будет лучше усваиваться, если приводить яркие примеры. Очень хорошо для этого подходят программы из пакета Microsoft Office.
  2. Понятие “каркас приложения” достаточно сложно для понимания, и в то же время очень важное, поэтому необходимо уделить его объяснению особое внимание.

План лекции

  1. Особенности программирования в Windows
  2. Компоненты среды Visual C++
  3. Каркас приложения и MFC

Особенности программирования в Windows

К особенностям программирования в Windows, можно отнести:

  1. Обработку сообщений
  2. Интерфейс графического устройства
  3. Программирование, основанное на ресурсах
  4. Способы управления памятью

Обработка сообщений

Существенное различие между MS-DOS программой и Windows программой состоит в способе получения введенных пользователем данных: первая вызывает операционную систему, вторая использует поступающие от нее сообщения. Именно поэтому Windows – программы называют приложениями.

Интерфейс графического устройства

Многие MS-DOS – программы записывают данные прямо в видеопамять и порт принтера. Недостаток этого метода состоит в том, что разработчику приходилось создавать отдельные драйверы для каждой из множества моделей видеоплат и принтеров. В Windows включен особый “слой абстракции” - интерфейс графического устройства (Graphics Device Interface, GDI). Драйверы для видеоплат и принтеров представляет сама Windows, благодаря чему вашей программе не надо знать, видеоплата и принтер, какого типа подключены к системе. Вместо того, чтобы обращаться к оборудованию, программа вызывает GDI – функции, ссылающиеся на структуру данных – контекст устройства (device context). Windows сопоставляет структуру контекста устройства с физическим устройством и выдает соответствующие команды ввода/вывода. GDI обеспечивает почти такую же скорость работы, как и прямой доступ к видеопамяти, и позволяет нескольким Windows – программам одновременно работать с дисплеем.

Интерфейс графического устройства (GDI) – подсистема операционной системы Windows, которая отвечает за отображение данных и делает вывод аппаратно-независимым.

Контекст устройства (Device contex – ключевой элемент GDI, служащий для представления физического устройства. С каждым объектом “контекст устройства” С++ связан контекст устройства Windows, идентифицируемый 32 - разрядным описателем типа HDC. Библиотека MFC предоставляет несколько классов контекста устройства.

Программирование, основанное на ресурсах

Программируя в MS-DOS, программисты обычно определяют данные при помощи инициализирующих констант, либо при помощи считывания их из отдельных файлов. Разрабатывая программу под операционную систему Windows, данные обычно хранят в файле ресурсов.

Стандартные ресурсы:

  • Диалоговые окна (Dialog)
  • Значки (Icons)
  • Определения меню (Menu)
  • Определения панелей инструментов (Toolbar)
  • Растровые изображения (Bitmap)
  • Курсоры мыши (Cursor)

Кроме стандартных, программист может сам определить свои собственные ресурсы.

Ресурсы можно создавать двумя способами:

  1. Описать ресурсы вашей программы в текстовом ASCII файле с расширением RC. (Этот способ практически не используется).
  2. Создать ресурс при помощи редактора ресурсов в режиме WYSIWYG (What You See Is What You Get – “что видишь, то и получаешь”).

Управления памятью

Программируя под Windows, программисту теперь не стоит беспокоиться о нехватке и распределении памяти.

Каждая программа получает в свое распоряжение частное 4 – гигабайтное виртуальное адресное пространство, к каждому байту которого, она может обращаться используя один единственный 32 – разрядный линейный адрес.

Компоненты среды Visual C++

Среда программирования Visual C++ состоит и следующих основных компонентов:

  1. Редактор исходного текста
  2. Редактор ресурсов
  3. Компилятор С/С++
  4. Компилятор ресурсов
  5. Компоновщик
  6. Отладчик
  7. Мастер приложений (AppWizard)
  8. Мастер классов (ClassWizard)
  9. Галерея (Gallery)
  10. Microsoft Foundation Class Library (MFC)
  11. Microsoft Active Template Library (ATL)

Компилятор ресурсов – компилирует текстовые файлы с описанием ресурсов (RS) в двоичные RES – файлы.

Компоновщик – служит для формирования исполняемого Exe файла. Сначала он считывает OBJ и RES файлы, сформированные компилятором С/С++ и компилятором ресурсов, а затем обращается к LIB – файлам за MFC кодом.

AppWizard – генератор кода, создающий рабочую заготовку Windows – приложения с теми компонентами, именами классов, которые программист задает в его диалоговых окнах.

ClassWizard – программа, реализованная как DLL и доступная через меню View среды разработки. Она избавляет программистов от нудной работы, связанной с кодированием классов Visual С++.

При помощи ClassWizard можно легко:

  1. Создать новый класс
  2. Создать новый обработчик сообщений
  3. Создать виртуальную функцию

Галерея (Gallery) (или, официально, Components and Controls Gallery – галерея компонентов и элементов управления) позволяет использовать одни и те же программные компоненты сразу в нескольких проектах. Галерея оперирует с тремя типами модулей:

  • Элементы управления ActiveX
  • Модули исходного кода на С++
  • Компоненты Visual C++

Элементы управления ActiveX

При добавлении в систему элемента управления ActiveX (OCX, ранее элемента управления OLE) в реестре Windows создается новая запись. Все зарегистрированные OCX появляются в окне Gallery, благодаря чему их можно выбирать в любом проекте.

Модули исходного кода на С++

Создав новый класс или ресурс, можно добавить его код в Галерею, после чего его можно копировать в другие проекты.

Компоненты Visual C++

Галерея может содержать инструменты для добавления в проект каких-либо функций. Такого рода инструмент мог бы автоматизировать внесение в существующий проект новых классов, функций, переменных членов и ресурсов. Некоторые такие компоненты (например, обработка времени простоя, поддержка палитры, экран заставки) поставляются непосредственно Microsoft, в составе Visual C++, другие - сторонними фирмами.

Microsoft Foundation Class Library (MFC)

MFC – это библиотека классов, которая определяет каркас приложений.

Microsoft Active Template Library (ATL)

ATL – представляет собой средство построения элементов управления ActiveX. Элементы управления ActiveX можно создавать и при помощи MFC, но они получаются слишком громоздкие.

Каркас приложения MFC

В современных средах программирования существует два подхода:

  1. Каркасный (Visual C++). При каркасном подходе изначально приложение создается на основе каркаса, и программист добавляет в него функциональность. При этом необходимо хорошо представлять структуру приложения.
  2. Компонентный (Delphi, C++ Builder, Visual Basic). В данном случае приложение создается на основе одного каркаса, который не дается программисту для изменения, а вся функциональность создается путем добавления и изменения программных компонентов.

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

Дадим определение каркасу приложений

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

Одно из главных преимуществ, при использовании каркасных приложений, состоит в том, что каркасные приложения имеют стандартную структуру. Создав Windows – приложение на базе библиотеки MFC, можно спокойно передать ее другому программисту для поддержки, а самому заняться разработкой новой программы.

Документы и их представление

Как правило, большинство приложений содержат два класса: “документ” (document) и “вид” (view). Такая архитектура “документ – вид” является стержнем каркаса приложений.

Архитектура “документ – вид” отделяет данные от их представления. Очевидное преимущество этого подхода – возможность представить одни и те же данные по разному.

Документом будем называть класс, отвечающий за обработку и сохранение данных. В каркасе приложения MFC этот класс имеет имя:
С<имя проекта>Doc

Видом будем называть класс, отвечающий за представление данных, на устройстве вывода. В каркасе приложения MFC этот класс имеет имя:
С<имя проекта>View

Контрольные вопросы

  1. Что называется “интерфейсом графического устройства” ?
  2. Что такое контекст устройства и как он связан с интерфейсом графического устройства ?
  3. Какие компоненты среды Visual C++ Вы знаете?
  4. Что такое MFC?
  5. Что такое ATL и чем она отличается от MFC?
  6. Какие подходы к построению современных приложений вы знаете, и чем они различаются?
  7. Что называется “Документом”?
  8. Что называется “Видом”?

[На главную страницу сайта] [Другие темы раздела] [Содержание курса] [Лабораторная работа к лекции] [Скачать задачи] [Следующая лекция]