Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СКТ - 5,6сем.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
8.67 Mб
Скачать

Венгерская нотация, ссылки и ресурсы

Венгерская нотация – это соглашение о наименовании переменных и функций. Принцип ее состоит в следующем: имена переменных должны содержать префикс, описывающий тип данных переменной. В ряде случаев, префикс может служить указателем на способ использования переменной.

Префикс

Описание

a

массив array

ch

символ char

by

байт byte

n

целое short

i

целое int

b

логическое bool

w

слово word

Ссылка – это 32-разрядное слово, однозначно определяющее какой-либо объект среды Windows.

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

Ссылка на окно позволяет однозначно определить каждое окно, используемое в системе. HWnd – тип ссылок на окно; HDC – тип ссылок на контекст устройства; Hmenu - тип ссылок на меню.

Графические объекты – пиктограммы, курсоры, текстовые курсоры, окна сообщений, диалоговые окна, шрифты, битовые образы, перья и кисти – это примеры ресурсов Windows. Вообще, ресурс означает данные, которые включены в исполняемый файл программы, хотя технически они не располагаются в сегменте обычных данных программы. Ресурсы принадлежат данному приложению и не разделяемы.

Написание простых приложений Windows

Практически каждая Windows-программа состоит из ряда обязательных частей:

  1. Функции WinMain – являющейся точкой входа в программу.

  2. Создания и описания атрибутов класса окна.

  3. Создание экземпляра окна данного класса.

  4. Цикла обработки сообщений.

  5. Оконной функции, обрабатывающей сообщения.

Рассмотрим код программы.

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]