- •Синхронизация процессов и цепочек
- •Венгерская нотация, ссылки и ресурсы
- •Стандартные кисти, иконки, курсоры
- •Пример:
- •Введение в ресурсы
- •Курсоры, пиктограммы и растровые изображения
- •Работа с текстом
- •Работа с мышью
- •Ресурс панель диалога
- •Основные понятия машинной графики
- •Рассмотрим такие примитивы, как вершина, отрезок, воксель и модели, строящиеся на их основе, а также функциональные модели. Полигональные модели
- •Воксельные модели
- •Поверхности свободных форм (функциональные модели)
- •Проекции
- •Различают следующие проекции.
- •Алгоритм Коэна - Сазерленда отсечения прямоугольной областью
- •Метод дихотомии
- •Задача удаления невидимых линий и поверхностей
- •Удаление нелицевых граней многогранника. Алгоритм Робертса
- •Алгоритм Варнока
- •Алгоритм Вейлера-Азертона
- •Метод z-буфера
- •Методы приоритетов. Алгоритм художника.
- •Алгоритм плавающего горизонта
- •Алгоритмы построчного сканирования для криволинейных поверхностей
- •Библиотека OpenGl
- •Простейшая программа
- •Создание формы
- •Формат пикселя
- •Вершины и система координат
- •Треугольники
- •Многоугольники
- •Область рисования
- •Преобразование координат. Матрицы
- •Видовое преобразование. Масштабирование, поворот и перенос
- •Параметры вида. Перспективная проекция
- •Буфер глубины
- •Надстройки над OpenGl
- •Источник света
- •Свойства материала и модель освещения
- •Отсечение
- •Анализ алгоритмов. Модель вычислений
- •Асимптотический анализ алгоритмов
- •Анализ рекурсивных алгоритмов
- •Метод заметающей прямой
- •Метод локусов. Задачи геометрического поиска
- •Задачи регионального поиска. Многомерное двоичное дерево
- •Задачи локализации точки. Метод луча
- •Локализация точки на планарном подразбиении. Метод полос
- •Некоторые основные понятия вычислительной геометрии
- •Построение звездчатого полигона
- •Предварительная разработка алгоритма построения выпуклой оболочки на плоскости
- •Метод обода Грэхема
- •Триангуляция Делоне
- •Диаграмма Вороного
- •Построение диаграммы Вороного
- •Модель osi
- •Уровни модели tcp/ip
Венгерская нотация, ссылки и ресурсы
Венгерская нотация – это соглашение о наименовании переменных и функций. Принцип ее состоит в следующем: имена переменных должны содержать префикс, описывающий тип данных переменной. В ряде случаев, префикс может служить указателем на способ использования переменной.
Префикс |
Описание |
a |
массив array |
ch |
символ char |
by |
байт byte |
n |
целое short |
i |
целое int |
b |
логическое bool |
w |
слово word |
Ссылка – это 32-разрядное слово, однозначно определяющее какой-либо объект среды Windows.
Ссылка представляет собой число, имеющее смысл только в указанном контексте и определяющее объект в таблице объектов, которая поддерживается и используется ядром Windows.
Ссылка на окно позволяет однозначно определить каждое окно, используемое в системе. HWnd – тип ссылок на окно; HDC – тип ссылок на контекст устройства; Hmenu - тип ссылок на меню.
Графические объекты – пиктограммы, курсоры, текстовые курсоры, окна сообщений, диалоговые окна, шрифты, битовые образы, перья и кисти – это примеры ресурсов Windows. Вообще, ресурс означает данные, которые включены в исполняемый файл программы, хотя технически они не располагаются в сегменте обычных данных программы. Ресурсы принадлежат данному приложению и не разделяемы.
Написание простых приложений Windows
Практически каждая Windows-программа состоит из ряда обязательных частей:
Функции WinMain – являющейся точкой входа в программу.
Создания и описания атрибутов класса окна.
Создание экземпляра окна данного класса.
Цикла обработки сообщений.
Оконной функции, обрабатывающей сообщения.
Рассмотрим код программы.
program Win;
uses WinTypes, WinProcs;
var Wnd: HWnd; Msg: TMsg;
{Оконная функция}
function W1(Wnd: hWnd; iMessage, wParam: Word; lParam: LongInt): LongInt; export;
begin {Обработка сообщений}
case iMessage of
WM_Destroy:
begin
PostQuitMessage(0);
exit;
end;
end;
W1 := DefWindowProc(Wnd, iMessage, wParam, lParam);
end;
Оконная функция выполняет непосредственную обработку сообщений. Параметры, передаваемые этой функции, эквивалентны полям структуры типа TMsg. Каждое получаемое оконной функцией сообщение имеет уникальный идентификатор (см. файл WINTYPES.INT). Обычно для обработки сообщений используется конструкция типа переключателя. Все сообщения, не обрабатываемые оконной функцией, передаются специальной функции ядра Windows DefWindowProc.
Описанное сообщение WM_Destroy означает, что система пытается закрыть окно. В ответ на это сообщение, вызовом процедуры PostQuitMessage, программа помещает в очередь сообщение WM_Quit. Когда функция GetMessage получает это сообщение, цикл обработки сообщений заканчивает работу и программа завершается.
{Описание и регистрация класса окна}
procedure Register;
var
WndClas: TWndClass;
begin
if hPrevInst <> 0 then Exit;
WndClas.Style := CS_HReDraw or CS_VReDraw;
WndClas.lpfnWndProc:= @W1;
WndClas.cbClsExtra := 0; позволяют выделить дополнительную
WndClas.cbWndExtra := 0; память в структуре определения класса
WndClas.hInstance := HInstance; ссылка на экземпляр программы
WndClas.hIcon := LoadIcon(0, Idi_Application);
WndClas.hCursor := LoadCursor(0, Idc_Arrow);
WndClas.hbrBackground := GetStockObject(white_Brush);
WndClas.lpszMenuName := ''; ссылка на строку имени меню
WndClas.lpszClassName := 'Class1';
if not RegisterClass(WndClas) then
begin
MessageBox(GetFocus, 'Can not Register Class', 'Error ', MB_OK);
Halt;
end;
end;
Окно создается на основе класса. В этом классе указывается адрес “оконной” функции, обрабатывающей поступающие от ядра Windows сообщения, а также атрибуты всех окон, принадлежащих этому классу, т.е. задаются основные свойства окон. Перед созданием окна класс должен быть зарегистрирован вызовом функции RegisterClass. Класс окна представлен структурой TWndClass.
{Точка входа в программу}
procedure WinMain;
begin
Register;
{Создание окна с определенными атрибутами}
Wnd:=CreateWindow('Class1','Main Window', WS_OverLappedWindow, 0, 0, 400, 200, 0, 0,hPrevInst, nil); имя класса, заголовок, стиль, х, у верхний левый угол, ширина, высота, родительское окно, меню окна, экземпляр программы (ссылка на сегмент данных программы), доп. информация
ShowWindow(Wnd, CmdShow);
UpDateWindow(Wnd);
Созданный класс окна определяет основные характеристики окна. При создании конкретного окна данного класса, используя вызов функции CreateWindow, можно указать более детальные характеристики для окна. Функция CreateWindow возвращает ссылку на окно типа HWnd, сохраняемую в переменной Wnd. Для отображения на экране окна используется функция ShowWindow, а для перерисовки изображения внутри окна – UpDateWindow.
{Цикл обработки сообщений}
while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
После того, как окно отображено на экране, управление передается циклу обработки сообщений. Функция GetMessage извлекает сообщения из очереди и помещает в структуру типа TMsg. Для всех сообщений, кроме WM_Quit, эта функция возвращает ненулевое значение и цикл продолжает обработку сообщений. Процедура TranslateMessage передает структуру типа TMsg ядру Windows для преобразования сообщений виртуальных клавиш в сообщения о символах. Вызов данной процедуры следует производить только в тех приложениях, в которых необходимо обрабатывать ввод пользователя с клавиатуры (и работа с меню без мыши). Процедура DispatchMessage используется для распределения текущего сообщения соответствующей функции окна.
end;
begin
WinMain;
end.
