
- •1. Признаки сложных систем. Сложность, присущая программному обеспечению.
- •2. Компоненты объектно-ориентированного подхода.
- •3. Объекты и классы с точки зрения объектно-ориентированного проектирования.
- •4. Модели и диаграммы, используемые в объектно-ориентированном подходе.
- •5. Техника отладки.
- •6. Работа с многофайловыми проектами. Использование включаемых файлов.
- •9. Простое наследование. Контроль доступа к атрибутам класса.
- •10. Виртуальные функции (вф) и абстрактные классы.
- •11. Множественное и виртуальное наследование.Множественное наследование
- •12 Перегрузка операций
- •13. Шаблоны функций, макросы, inline-функции.
- •14. Шаблоны классов.
- •15. Обработка исключительных ситуаций, структурная обработка исключений.
- •16. Пространства имён. Кратко о механизме пространства имен
- •Зачем нужен механизм пространства имен?
- •Имитация средствами языка Си
- •Правило составления имени
- •Недостатки
- •17 Строки и потоки.
- •18.Стандартная библиотека: Контейнеры
- •19 Реализация устойчивости объектов средствами mfc.
- •20. Структура Windows-приложения WinApi
- •21. Структура Windows-приложения, использующего библиотеку mfc
- •Документы и их представление
- •22. Обработка сообщений
- •23. Контекст устройства
- •24.Объекты gdi
- •25.Использование контекста отображения в памяти.
- •26.Режимы отображения.
- •27.Работа с меню. Обработка сообщений.
- •28.Работа с диалогами. Обработка сообщений.
- •29. Работа с полями ввода и кнопками.
- •30. Работа со списками и выпадающими списками. Работа со списком
- •Работа с комбинированном списком
- •Инициализация
- •Операции со строками
- •31. Классы CimageList и CtreeCtrl. Класс cImageList
- •Изменение содержимого списка
- •32. Классы CimageList и ClistCtrl. Класс cImageList
- •Изменение содержимого списка
- •Создание просмотра списка
- •Работа со столбцами
- •Функции для работы со списком в целом
- •Рабочие области просмотра списка
- •Поиск и сортировка записей
- •33. Классы CprogressCtrl, cRichEdit Ctrl, CsliderCtrl, cSpinButton Ctrl.
- •34. Классы cPropertySheet и cPropertyPage.
- •35. Передача информации в диалог и обратно.
- •36. Работа со стандартными диалогами.
- •37.Обработка сообщений от клавиатуры и мыши(wm_char,wm_keYxxx,wm_xButtoNxxx,
- •38 Таймеры, использование времени простоя программы и локального цикла обработки сообщений.
- •39. Библиотеки динамической компоновки. Явная и неявная загрузка dll.
- •Согласование экспортируемых элементов с импортируемыми
24.Объекты gdi
Каждый тип объектов GDI Windows представлен отдельным классом MFC. CGdiObject — абстрактный базовый класс для классов объектов GDI. Объект GDI представляется С++-объектом некоторого класса, производного от CGdiObject. Вот эти классы:
• CBitmap — Растровое изображение (bitmap) — массив битов, в котором каждой точке дисплея соответствует один или несколько битов. Растровые изображения можно использовать для хранения картинок, а также для создания кистей.
• CBrush — Кисть (brush) — точечный шаблон, используемый для закраски областей.
• CFont — Шрифт (font) — полный набор символов некоторой гарнитуры и некоторого размера. Обычно шрифты хранятся на диске как ресурсы, причем некоторые шрифты специфичны для определенных устройств.
• CPalette — Палитра (palette) — интерфейс преобразования цветов, позволяющий приложениям в полной мере использовать цветовые возможности устройства вывода, не мешая другим приложениям.
• СРеп — Перо (pen) — инструмент для рисования линий и границ фигур. Вы можете задать цвет и толщину пера, а также указать, будут ли линии сплошными, пунктирными или штриховыми.
• CRgn — Регион (region) — область, которая представляет собой многоугольник, эллипс или их комбинацию. Регионы можно использовать для закраски, обрезания выводимого изображения и проверки на попадание курсора мыши на определенные участки.
Создание и уничтожение GDI-объектов
Вы еще ни разу не создавали объекты класса CGdiObject — вместо этого Вы конструировали объекты производных классов. Конструкторы для некоторых классов, например, СРеп или CBrush, позволяют указывать достаточно информации, чтобы создать объект за одну операцию. Создание других объектов, например, CFont или CRgn, требует второй операции. Объекты этих классов создаются конструктором по умолчанию, после чего вызывается сответствую-щая функция, например, CreateFont или CreatePolygonRgn.
Класс CGdiObject содержит виртуальный деструктор. Деструкторы производных классов удаляют GDI-объекты, связанные с соответствующими С++-объектами. Если Вы создали объект класса, производного от CGdiObject, то обязаны удалить его до завершения программы. Для удаления GDI-объекта его следует сначала отделить от контекста устройства. Пример мы рассмотрим в следующем разделе.
ПРИМЕЧАНИЕ Завершение программы без удаления GDI-объекта в Win 16 несло серьезную опасность. ПаМять GDI не освобождалась до момента перезапуска Windows. В Win32 память GDI принадлежит процессу и освобождается при завершении программы. Тем не менее, GDI-объект, который Вы забыли освободить, может напрасно занимать значительный объем памяти.
Управление GDI-объектами
Итак, Вы знаете, что GDI-объекты нужно удалять, предварительно отсоединив от контекста устройства. Как же это сделать? Функции семейства CDC::SelectObject выбирают GDI-объект в контекст устройства и возвращают указатель на объект, который был выбран в контекст до этого (и теперь отсоединен). Но возникает проблема: нельзя отсоединить старый объект, не выбрав в контекст новый. Простое решение — «сохранить» первоначальный GDI-объект при выборе своего объекта в контекст и восстановить его по завершении работы. После этого Вы можете удалить свой GDI-объект. Пример приведен ниже:
void CMyView::OnDraw(CDC* pDC)
{СРеп newPen(PS_DASHDOT, 2, (COLORREF) 0); // черное перо шириной в 2 точки СРеп* pOldPen = pDC->SelectObject(&newPen);
pDC->MoveTo(10, 10);
pDC->LlneTo(110, 10);
pDC->SelectObject(pOldPen): // newPen отсоединяется } // newPen автоматически уничтожается при выходе
При уничтожении контекста устройства все его GDI-объекты отсоединяются. Таким образом, если известно, что контекст устройства будет уничтожен до того, как будут уничтожены выбранные в него объекты, отсоединять эти объекты не нужно. Например, если Вы объявили перо как переменную-член класса «вид» (и инициализировали его при инициализации объекта «вид»), то не надо отсоединять перо внутри OnDraw: контекст устройства, временем жизни которого управляет обработчик OnPaint в базовом классе, будет уничтожен раньше.
Стандартные GDI-объекты
Windows предоставляет Вам ряд стандартных GDI-объектов (stock GDI objects). Так как эти объекты — часть Windows, заботиться об их удалении не нужно (Windows игнорирует запросы на удаление стандартных объектов). Функция библиотеки MFC CDC::SelectStockObject выбирает стандартный объект в контекст устройства и возвращает указатель на выбранный ранее объект, который отсоединяется от контекста. Стандартные объекты удобны, когда Вам нужно отсоединить свой собственный нестандартный GDI-объект перед его удалением. Стандартный объект можно применять вместо «старого» объекта, который использовался в предыдущем примере':
void CMyView::OnDraw(CDC* pDC) {
CPen newPen(PS_DASHDOT, 2, (COLORREF) 0); // черное перо шириной в 2 точки
СРеп* pOldPen = pDC->SelectObject(&newPen);
pDC->MoveTo(10, 10);
pDC->LineTo(110, 10);
pDC->SelectStockObject(BLACK_PEN); // newPen отсоединяется } // newPen автоматически уничтожается при выходе
Стандартные перья, кисти, шрифты и палитры перечислены в описании функции CDC::SelectStockObject в руководстве Microsoft Foundation Class Reference.