
- •2) Виртуальная память
- •3) Вывод информация в окно с помощью классов из библиотеки mfc.
- •4) Иерархия классов библиотеки mfc.
- •5 Императивное, функциональное и логическое программирование. Сходство и различие.
- •6)Контейнерные классы библиотеки mfc.
- •7)Контекст устройства. Классификация контекстов устройств. Функции работы с контекстами устройств
- •8. Назначение и Классификация ппп
- •9) Направления интеллектуализации пакетов прикладных программ.
- •10.Направления интеллектуализации ппп. Типология задач интеллектуализации.
- •11) Обработка исключений с помощью библиотеки mfc.
- •12)Обработка сообщений в библиотеке mfc
- •13) Общая характеристика ппп. Функциональное и системное наполнение ппп. Типовые проекты ппп.
- •14) Объекты в Win32. Классификация объектов. Функции работы с объектами Win32.
- •16)Организация асинхронного ввода. Сообщения от манипулятора типа «мышь». Сообщения от клавиатуры (см также 33!!!)
- •17 Организация взаимодействия процессов и потоков в Win32.Процессы и потоки в Win32. Приоритеты. Планирование
- •18 Основнные понятия объектно-ориентированного программирования.
- •19) Библиотека stl.
- •21)Полиморфизм. Перегрузка методов и операторов. Виртуальные методы.
- •23) Понятие сериализации.
- •24 Стандартные элементы управления
- •25) Процессы и потоки в Win32. Приоритеты. Планирование процессорного времени. Функции работы с процессами и потоками.
- •26)Архитектура «документ/представление»
- •Глава 20. Документ и его представления
- •Глава 21. Печать и предварительный просмотр документов
- •27) Реализация многопоточных приложений с использованием библиотеки mfc.
- •28 Ресурсы Windows. Способы задания ресурсов Windows-приложения и их использования.
- •29) Системы координат
- •29 Система координат
- •30 Средства реализации взаимного исключения в Win32.
- •31)Стандартные элементы управления и диалоговые панели в библиотеке mfc.
- •32 Структура windows приложения.
- •33) Структура и типология сообщений в Win32. Классиф сообщений. Очередь сооб, ф-ункции работы с ней. (см также 16!)
- •34) Таймер. Назначение, свойства и особенности использования
- •2) Можно заставить Windows пересылать сообщения другой функции этого же приложения.
- •35) Технологии конструирования по
- •36) Шаблоны классов и функций
- •37) Шрифты Типы шрифтов
- •Создание dll
23) Понятие сериализации.
С. - это механизм, позволяющий преобразовать текущее состояние объекта в последовательный поток байт, который обычно затем записывается на диск, и восстановить состояние объекта из последовательного потока, обычно при чтении с диска. Это позволяет сохранять текущее состояние приложения на диске, и восстанавливать его при последующем запуске. Механизм сериализации в MFC основан на современной теории объектно-ориентированного проектирования и более того, этот механизм не привязан к какому-то определенному типу и допускает свое дальнейшее развитие.
С. — метод, который позволяет сохранять и восстанавливать объекты классов, созданных на базе классов CObject. Этот метод можно разделить функционально на две составляющих.
наличие определенной виртуальной функции (Serialize) позволяет унифицировать процесс сохранения/восстановления объектов. Это обычная практика для программ, написанных с использованием практически любого объектно-ориентированного языка. Для реализации процесса следует только переопределить виртуальную функцию, вызов которой по указателю на объект одного из базовых классов приведет к вызову нужной функции. Библиотека MFC обеспечивает открытие потока, прежде всего файла, самостоятельно. Связывая этот поток с классом CArchive, библиотека обеспечивает тем самым удобный способ определения типа операции (чтение/запись) и целый набор функций для всех простейших типов данных (например, чисел) и библиотечных классов. С другой стороны, сериализация поддерживает механизм динамического создания объектов неизвестного заранее типа. Например, приложение должно сохранять и восстанавливать некоторое количество объектов различного типа. Естественно, что для восстановления объекта посредством вызова соответствующего конструктора необходимо точно знать тип создаваемого объекта. Механизм сериализации делает это за программиста, сохраняя необходимую информацию самостоятельно. Единственное, что требуется — все классы сохраняемых и восстанавливаемых объектов должны базироваться на классе CObject и обеспечить систему соответствующей информацией, используя макросы DECLARE_SERIAL и IMPLEMENT_SERIAL при объявлении и в реализации соответственно.
24 Стандартные элементы управления
Любое стандартное приложение Windows использует различные элементы управления, такие, как кнопки, полосы просмотра, редакторы текстов и т.д, реализованные в виде дочерних окон.
Кнопки различных стилей (класс BUTTON)
Нажимаемые кнопки представляют собой прямоугольник, внутри которого находится текст, заданный в параметре текста окна функции CreateWindow. Используются в основном для запуска немедленного действия без сохранения какой-либо индикации кнопки типа “включено/выключено”.
Флажки-переключатели (check boxes) представляют собой маленькие квадратные окна с размещенным обычно справа от окна текстом. Флажки, как правило, действуют как двухпозиционные переключатели: один щелчок вызывает появление контрольной метки (состояние “включено”); другой щелчок приводит к исчезновению этой метки (состояние “выключено”). В приложениях флажки обычно объединяются, что дает пользователю возможность установить опции.
Переключатели (radio buttons, радио-кнопки) похожи на флажки, но их форма не квадратная, а круглая. Жирная точка внутри флажка показывает, что переключатель отмечен. В окнах диалога группы радио-переключателей, как правило, используются для индикации нескольких взаимоисключающих опций. В отличие от флажков, если повторно щелкнуть на радио-кнопке, то ее состояние не изменится.
Все выше указанные кнопки обрабатывают сообщения от мыши и от клавиатуры.
Окна групп (group boxes) – является исключением в классе кнопок. Оно не обрабатывает ни сообщения от клавиатуры, ни сообщения от мыши, оно не посылает родительскому окну сообщений WM_COMMAND. Окно группы представляет собой прямоугольную рамку с текстом наверху. Окна групп часто используют для того, чтобы в них размещать другие дочерние окна управления.
Статические поля (класс static)
Статическое дочернее окно управления - это окно, создаваемое на базе предопределенного класса ”static”.Их нельзя использовать для управления работой приложения: они не воспринимают щелчки мыши и не обрабатывают сообщения от клавиатуры, не посылает родительскому окну сообщение WM_COMMAND. Обычно этот орган управления используется для оформления внешнего вида диалоговых панелей или окон приложения. Создание CreateWindow
Текстовые редакторы (класс edit) на его базе можно создать однострочный или многострочный текстовый редактор. Создание: CreateWindow. Помещение текста: SetWindowText. Получение текста: GetWindowTextLength и GetWindowText.
Списки разных стилей (класс listbox) можно создавать одноколоночные и многоколоночные списки, имеющие вертикальную (для одноколоночных списков) и горизонтальную (для многоколоночных списков) полосу просмотра.Список может быть как с одиночным выбором, так и с множественным. Последний позволяет пользователю выбирать более одного пункта списка.Создание CreateWindow.
Комбинированные списки (класс combobox)это класс является комбинацией списка и однострочного редактора, поэтому для комбинированного списка используются стили, коды извещения и сообщения, аналогичные списку ”listbox”, а также некоторые сообщения, специфические для редактора текста класса “edit”.Создание: CreateWindow
24 Объекты в Win32. Классификация объектов. Функции работы с ними
Прямые (отрезки) и кривые — основа любой векторной графической системы. GDI поддерживает прямые линии, прямоугольники, эллипсы (включая окружности), дуги, являющиеся частью кривой эллипса, и сплайны Безье.
Создание прямых: MoveTo(10, 10); - перемещает текущую позицию в точку с координатами A(10,10); LineTo(10, 10); - рисует линию от текущей позиции до точки с координатами A(10,10).
Для соединения массива точек используется:
функция LineTo
POINT pt [5] = { 100, 100, 200, 100, 200, 200,
100, 200, 100, 100}; // массив из 5 точек(10 значений)
MoveToEx (hdc, pt[0].x, pt[0].y, NULL);
for (i = 1; i < 5; i++)
LineTo (hdc, pt[i].x, pt[i].y);
функция Polyline
Polyline (hdc, pt, 5);//рисование того же массива из 5 точек
Создание прямоугольников: Rectangle()
Создание прямоугольника с закругленными углами: RoundRect()
Создание эллипсов:Ellipse()
Создание дуг:Arc() Методы Chord() (сегмент) и Pie() (сектор) принимают такие же аргументы, имеющие тот же смысл, что и в случае метода Arc(). Сегмент получается из дуги соединением конечных точек, а сектор - соединением конечных точек с центром эллипса.
Создание сплайнов: сплайны — это математические выражения, одна из самых удобных прямых. PolyBezier (hdc, pt, iCount); PolyBezierTo (hdc, pt, iCount);Удаление объектов: с помощью функции DeleteObject.
Закрашенные области.
Если набор прямых и кривых линий ограничивает со всех сторон некоторую область, то она может быть закрашена с использованием объекта GDI "кисть", выбранного в контексте устройства.
Кисть может быть сплошной, штриховой (состоящей из горизонтальных, вертикальных или диагональных штрихов) или шаблонной, заполняющей область горизонтально и вертикально.
Для выбора одной из встроенных кистей можно воспользоваться функцией GetStockObject, однако в Windows есть только монохромные встроенные кисти.
Использование: для заполнения содержимого рисуемых фигур. Использование кисти определяет цвет и образец заполнения. Создание: при создании и использовании кистей используются несколько дополнительных функций: цветной сплошной CreateSolidBrush, шести кистей штриховки CreateHatchBrush, собственный стиль штриховки CreatePatternBrush.
цвет фона и режим фона управляются функциями SetBkColor и SetBkMode соответственно. А также SetROP2.(для обеих функций)
Начало отсчета кисти (brush origin) - это атрибут контекста устройства. Он используется для определения координат точки внутри кисти, которая будет служить начальной при закраске внутренней области фигуры или окна. По умолчанию используются координаты (0,0), соответствующие верхнему левому углу кисти (в системе координат, выбранной в контексте устройства по умолчанию).Приложение может изменить начало отсчета кисти (сдвинуть кисть) при помощи функций SetBrushOrg иUnrealizeObject. Сначала при помощи функции UnrealizeOrg нужно сбросить координаты кисти, а потом функцией SetBrushOrg установить новые значения координат.
Удаление: при помощи функции DeleteObject.
Битовые шаблоны (растровые шаблоны, растровые образы)— это двумерный массив битов, соответствующий пикселям устройства отображения. Это базовый инструмент в растровой графике.
Использование: для отображения сложных (часто из реального мира) изображений на дисплее или принтере. Битовые образы также используются для отображения маленьких картинок, таких как значки, курсоры мыши, кнопки панели инструментов программ, которые нужно быстро нарисовать. Создание: для того чтобы использовать ресурс битового изображения, его нужно предварительно загрузить в память при помощи функции LoadBitmap. После загрузки изображения эта функция выдает дескриптор битового изображения типа HBITMAP. HBITMAP hBitmap=LoadBitmap(hInst,MAKEINTRESOURCE(125));/ можно по другому
Можно заранее подготовить растровое изображение в одном из графических редакторов и сохранить его в bmp-файле. Затем можно воспользоваться этим изображением в приложении, включив его в состав ресурсов приложения.
В битовом изображении bitmap каждый пиксел представлен своим цветом. Рисование битовых изображений выполняется путем копирования соответствующего массива графических данных в видеопамять.
Типы битовых шаблонов: aппаратно-независимые, которые могут быть сохранены в файлах на диске;аппаратно-зависимые, являющиеся объектами GDI;Удаление: при помощи функции DeleteObject.
Текст отличается от других математических объектов компьютерной графики. Типов текста бесконечно много. Поэтому поддержка текста часто наиболее сложная часть в системах компьютерной графики, и, вместе с тем, наиболее важная.
Функции для вывода текста:
Наиболее часто используемой функцией вывода текста является функция:
TextOut (hdc, xStart, yStart, pString, iCount);
Для отображения на экране одного столбца TabbedTextOut :
TabbedTextOut (hdc, xStart, yStart, pString, iCount, iNumTabs, piTabStops, xTabOrigin);
Расширенная функция вывода текста является функция ExtTextOut (приставка Ext означает расширенная):
ExtTextOut (hdc, xStart, yStart, iOptions, &rect, pString, iCount, pxDistance);
Вывод текста в прямоугольник
DrawText (hdc, pString, iCount, &rect, iFormat);
Объекты ядра используются системой и нашими приложениями для управления множеством самых разных ресурсов: процессами, потоками, файлами и т.д.
Что такое объект ядра
Система позволяет создавать и оперировать с несколькими типами объектов:маркерами доступа, файлами, проекциями файлов,портами завершения ввода-вывода, заданиями, почтовыми ящиками, мьютексами, каналам, процессами ,семафорами,потоками, ожидаемыми таймерами, событиями, критическими секциями, уведомлениями об изменениях на диске, кучами, подгружаемыми модулями, сокетами.
Эти объекты создаются Windows-функциями. Каждый объект ядра — блок памяти, выделенный ядром и доступный только ему. Этот блок представляет собой структуру данных, в элементах которой содержится информация об объекте. Поскольку структуры объектов ядра доступны только ядру, приложение не может самостоятельно найти эти структуры в памяти и напрямую модифицировать их содержимое. Такое ограничение Microsoft позволяет:
ни какой программе не нарушать целостность структур объектов ядра;
вводить, убирать или изменять элементы структур, не нарушая работы каких-либо приложений.
В Windows предусмотрен набор функций, обрабатывающих структуры объектов ядра по строго определенным правилам. Доступ к объектам ядра происходит только через эти функции.
вызывая функцию, создающую объект ядра, она возвращает описатель, идентифицирующий созданный объект. Описатель следует рассматривать как "непрозрачное" значение, которое может быть использовано любым потоком процесса.
этот описатель передается Windows-функциям, сообщая системе, какой объект ядра Вас интересует.
ЗащитаОбъекты ядра можно защитить дескриптором защиты (security descriptor), который описывает, кто создал объект и кто имеет права на доступ к нему. Дескрипторы защиты обычно используют при написании серверных приложений; создавая клиентское приложение.Большинство приложений вместо этого аргумента передает NULL и создает объект с защитой по умолчанию. SECURITY_ATTRIBUTES, лишь один её элемент имеет отношение к защите — lpSecurityDescriptor.
Создание объекта ядраКогда процесс инициализируется в первый paз, таблица описателей еще пуста. Но стоит одному из его потоков вызвать функцию, создающую объект ядра, как ядро выделяет для этого объекта блок памяти и инициализирует его, далее ядро просматривает таблицу описателей, принадлежащую данному процессу, и отыскивает свободную запись. Поскольку таблица еще пуста, ядро обнаруживает структуру с индексом 1 и инициализирует ее. Функции, создающие объекты ядра:CreateThread, CreateFile, CreateFileMapping, CreateSemaphore.Возвращают описатели, которые привязаны к конкретному процессу и могут быть использованы в любом потоке данного процесса. Значение описателя представляет собой индекс в таблице описателей
Закрытие объекта ядра По окончании работы с объектом ядра его нужно закрыть вызовом CloseHandle.