- •Синхронизация процессов и цепочек
- •Венгерская нотация, ссылки и ресурсы
- •Стандартные кисти, иконки, курсоры
- •Пример:
- •Введение в ресурсы
- •Курсоры, пиктограммы и растровые изображения
- •Работа с текстом
- •Работа с мышью
- •Ресурс панель диалога
- •Основные понятия машинной графики
- •Рассмотрим такие примитивы, как вершина, отрезок, воксель и модели, строящиеся на их основе, а также функциональные модели. Полигональные модели
- •Воксельные модели
- •Поверхности свободных форм (функциональные модели)
- •Проекции
- •Различают следующие проекции.
- •Алгоритм Коэна - Сазерленда отсечения прямоугольной областью
- •Метод дихотомии
- •Задача удаления невидимых линий и поверхностей
- •Удаление нелицевых граней многогранника. Алгоритм Робертса
- •Алгоритм Варнока
- •Алгоритм Вейлера-Азертона
- •Метод z-буфера
- •Методы приоритетов. Алгоритм художника.
- •Алгоритм плавающего горизонта
- •Алгоритмы построчного сканирования для криволинейных поверхностей
- •Библиотека OpenGl
- •Простейшая программа
- •Создание формы
- •Формат пикселя
- •Вершины и система координат
- •Треугольники
- •Многоугольники
- •Область рисования
- •Преобразование координат. Матрицы
- •Видовое преобразование. Масштабирование, поворот и перенос
- •Параметры вида. Перспективная проекция
- •Буфер глубины
- •Надстройки над OpenGl
- •Источник света
- •Свойства материала и модель освещения
- •Отсечение
- •Анализ алгоритмов. Модель вычислений
- •Асимптотический анализ алгоритмов
- •Анализ рекурсивных алгоритмов
- •Метод заметающей прямой
- •Метод локусов. Задачи геометрического поиска
- •Задачи регионального поиска. Многомерное двоичное дерево
- •Задачи локализации точки. Метод луча
- •Локализация точки на планарном подразбиении. Метод полос
- •Некоторые основные понятия вычислительной геометрии
- •Построение звездчатого полигона
- •Предварительная разработка алгоритма построения выпуклой оболочки на плоскости
- •Метод обода Грэхема
- •Триангуляция Делоне
- •Диаграмма Вороного
- •Построение диаграммы Вороного
- •Модель osi
- •Уровни модели tcp/ip
Работа с текстом
Для вывода строки текста на экран необходимо использовать контекст устройства и соответствующие функции, например:
case Message of
wm_Paint:
begin
MyDC:=BeginPaint(MyWnd,MyPaint);
TextOut(MyDC,x,y,’Пример вывода текста’,13); <-число символов
EndPaint(MyWnd, MyPaint);
end;
Выравнивание текста относительно рабочей области окна можно выполнить с помощью функции SetTextAlign.
В системе определено пять стандартных шрифтов. Для того, чтобы выбрать один из этих шрифтов, используется функция GetStockObject. Кроме того, можно создать логический шрифт – это список атрибутов шрифта, включая высоту, ширину, набор символов. Для этого используется функция CreateFont или функция CreateFontIndirect. Эти функции возвращают ссылку на логический шрифт, затем ссылка используется в качестве параметра функции SelectObject для выбора этого шрифта в качестве текущего для контекста. Структура, описывающая атрибуты шрифта имеет тип TLogFont и является параметром функции CreateFontIndirect.
CreateFont(Height, Width Escapement, Orientation, Weight: Integer; Italic, Underline, StrikeOut, CharSet, OutputPrecision, ClipPrecision, Quality, PitchAndFamily: Byte; FaceName: PChar): HFont;
Паpаметpы:
Height: Высота шpифта (в логических единицах).
Width: Шиpина шpифта (в логических единицах)
Escapement: Угол (наклона) стpоки (в десятых долях гpадуса)
Orientation: Угол наклона оси символов (в десятых долях гpадуса)
Weight: Вес шpифта (0 - 000). Либо можно использовать константы fw_, такие как fw_Bold.
Italic: Шpифт - куpсив.
Underline: Шpифт - с подчеpкиванием.
StrikeOut: Шpифт с пеpечеpкиванием.
CharSet: Одна из констант ANSI_CharSet, OEM_CharSet, Symbol_CharSet.
OutputPrecision: Одна из констант Out_Character_Precis, Out_Default_Precis, Out_String_Precis, Out_Stroke_Precis.
ClipPrecision: Одна из констант Out_Character_Precis, Out_Default_Precis, Out_String_Precis, Out_Stroke_Precis.
Quality: Одна из констант Default_Quality, Draft_Quality, Proof_Quality.
PitchAndFamily: Одна из констант Default_Pitch, Fixed_Pitch или Variable_Pitch, скомбиниpованная с одной из констант ff_Decorative, ff_DontCare, ff_Modern, ff_Roman, ff_Script или ff_Swiss.
FaceName: Название шpифта (заканчивающееся пустым символом).
CreateFontIndirect(var LogFont: TLogFont): HFont;
Создает логический шpифт, выбpанный из пула физических шpифтов интеpфейса GDI согласно хаpактеpистикам, указанным в ALogFont.
Паpаметpы:
ALogFont: Стpуктуpа TLogFont.
Пример.
var Font1:hFont; lFont:TLogFont;
begin
…
lFont.lfHeight:=25; высота шрифта
lFont.lfWidth:=15; ширина шрифта
lFont.lfUnderline:=1; тип шрифта подчеркнутый
lFont.lfItalic:=1; тип шрифта курсив
StrCopy(lFont.lfFaceName,'Helv');
Font1:=CreateFontIndirect(lFont);
SelectObject(MyDC,Font1);
TextOut(MyDC,20,20,'Helvetica-Underlined and Italics',34);
…
end.
Ресурс меню
Ядро Windows поддерживает два вида меню: строчное и всплывающее. Ресурс типа меню может быть создан двумя способами: при помощи текстового редактора и компилятора ресурсов RC.EXE или при помощи редактора ресурсов WORKSHOR.EXE. Рассмотрим пример ресурса меню.
NAME MENU наименование меню
BEGIN
POPUP "&File" наименование всплывающего меню
BEGIN
MENUITEM "Item1", 101 идентификатор эл-та
MENUITEM SEPARATOR разделитель
MENUITEM "Item2", 102
END
MENUITEM "&About", 103 наименование строчного меню
END
Идентификатор каждого элемента меню содержит наименование элемента и уникальный номер. Символ & указывает, что следующий за ним символ выделяется другим цветом и может быть использован для вызова элемента меню “горячей” клавишей.
Для подключения ресурса к программе используется директива компилятора $R. {$R Wmenu имя файла ресурсов}
Далее можно применить один из способов. Первый состоит в том, что имя описания меню в ресурсе указывается при создании класса окна. Таким образом, все окна данного класса будут иметь данное меню.
Перед регистрацией класса окна ему присваивается ряд атрибутов, в том числе меню класса.
WndClas.lpszMenuName := 'NAME';
После того, как класс окна будет зарегистрирован, все окна данного класса будут иметь указанное меню.
Второй способ состоит в указании ссылки на меню только при создании конкретного окна. В этом случае только одно окно будет иметь указанное меню.
Ресурс меню необходимо загрузить с помощью функции LoadMenu, возвращающей ссылку на загруженное меню. При вызове функции CreateWindow ссылка на это меню указывается в качестве параметра типа hMenu.
var
Window: hWnd;
MyMenu: hMenu;
...
MyMenu:=LoadMenu(hInstance,’Name’);
Window := CreateWindow('Menu Example', 'Menu Example', WS_OverLappedWindow, CW_UseDefault, 0, CW_UseDefault, 0, 0, MyMenu, hInstance, nil);
При выборе команды меню ядро Windows посылает сообщение wm_Command соответствующей оконной функции. Параметр wParam содержит идентификатор команды меню. Оконная функция должна выполнять все действия, связанные с командой меню.
case Message of
WM_Command:
case WParam of
101: begin
end;
102: begin
end;
end; end;
Существует ряд функций, позволяющий работать с меню.
Enable MenuItem – позволяет указать начальное состояние команды меню: обычная, отмененная или неактивная.
CheckMenuItem – отображает специальный символ рядом с названием команды (галочка).
AppendMenu –добавляет новые команды в меню.
DeleteMenu – удаляет команду из существующего меню и т.д.
