Программирование в Win32 API

Содержание

Слайд 2

Венгерская нотация Каждое слово в имени переменной пишется с прописной буквы

Венгерская нотация
Каждое слово в имени переменной пишется с прописной буквы и

слитно с другими словами.
Каждый идентификатор предваряется несколькими строчными буквами, определяющими его тип.
nMyVariable — переменная целого типа
cYourVariable — символьная перемення (char)
pszMyBuffer — указатель на строку с нулевым ограничителем (pointer to string terminated by zero)
Слайд 3

Венгерская нотация

Венгерская нотация

Слайд 4

Очередь сообщений В Windows существует одна общесистемная очередь сообщений и очереди

Очередь сообщений


В Windows существует одна общесистемная очередь сообщений и очереди

сообщений у каждого окна (First In First Out).
Операционная система реализует циклы, в ходе которых опрашивается очередь и выбирается информация о сообщениях в них.
При запуске каждой программы должно быть создано окно и запущен цикл обработки сообщений.
Функция WinMain() является стандартной точкой входа в программы для Windows; функция окна от нее отделена.
Слайд 5

Программа для Windows WinMain(список аргументов) { Подготовка и создание класса окон

Программа для Windows

WinMain(список аргументов)
{
Подготовка и создание класса окон с заданными характеристиками
Создание

экземпляра окна только что созданного класса
Пока не произошло необходимое для выхода событие
Опрашивать очередь сообщений и передавать их оконной функции;
Возврат из программы;
}
WindowFunction(список аргументов)
{
Обработать полученное сообщение;
Возврат;
}
Слайд 6

Программа для Windows #include LRESULT CALLBACK HelloWorldWndProc ( HWND, UINT, UINT,

Программа для Windows

#include
LRESULT CALLBACK HelloWorldWndProc ( HWND, UINT, UINT, LONG);

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevhInstance, LPSTR IpszCmdParam, int nCmdShow )
{
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;
char szClassName[] = «HelloWorld»; !*
/*Регистрируем создаваемый класс*/
/*Заполняем структуру типа WNDCLASS */
WndClass.style = CS_HREDRAW I CS_VREDRAW;
WndClass.lpfnWndProc = HelloWorldWndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
Слайд 7

Программа для Windows WndClass.hInstance = hInstance; WndClass.hIcon = Loadlcon (NULL,IDC_ APPLICATION);

Программа для Windows

WndClass.hInstance = hInstance;
WndClass.hIcon = Loadlcon (NULL,IDC_ APPLICATION);
WndClass.hCursor = LoadCursor

(NULL,. IDC_ ARROW);
WndClass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
WndClass.IpszMenuName = NULL;
WndClass.IpszClassName = szClassName;
if(!RegisterClass(&WndClass) )
{
MessageBox(NULL, »Cannot register class», »Error», MB_OK);
return 0;
}
Слайд 8

Программа для Windows hWnd = CreateWindow(szClassName, «Program No1», WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,

Программа для Windows

hWnd = CreateWindow(szClassName, «Program No1»,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT,

CW_USEDEFAULT,
NULL, NULL,
hInstance, NULL);
if(!hWnd)
{
MessageBox(NULL, »Cannot create window», »Error», MB_OK);
return 0;
}
Слайд 9

Программа для Windows /*Показать наше окно*/ ShowWindow (hWnd, nCmdShow); UpdateWindow(hWnd); /*Начало

Программа для Windows

/*Показать наше окно*/
ShowWindow (hWnd, nCmdShow);
UpdateWindow(hWnd);
/*Начало цикла сообщений*/

while (GetMessage (&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
LRESULT CALLBACK HelloWorldWndProc ( HWND hWnd, UINT Message,
UINT wParam, LONG lParam);
{
Слайд 10

Программа для Windows HDC hDC; PAINTSTRUCT PaintStruct; RECT Rect; switch(Message); {

Программа для Windows
HDC hDC;
PAINTSTRUCT PaintStruct;
RECT Rect;
switch(Message);
{
case WM_PAINT:
hDC =

BeginPaint(hWnd, &PaintStruct);
GetClientRect(hWnd, &Rect);
DrawText(hDC, »Hello, World!», -1, &Rect,
DT_SINGLELINE I DT_CENTER I DT_VCENTER);
EndPaint(hWnd, &PaintStruct);
return 0;
Слайд 11

Программа для Windows case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, Message, wParam, lParam); }

Программа для Windows
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, Message,

wParam, lParam);
}
Слайд 12

Программа для Windows WINAPI — определяет порядок передачи параметров при вызове

Программа для Windows
WINAPI — определяет порядок передачи параметров при вызове

процедуры
hInstance HINSTANCE = HANDLE = void*; условный номер экземпляра программы (хэндл)
hPrevInstance не используется
pszCmdLine — указатель на командную строку, которая набирается после имени запускаемой программы
nCmdShow — определяет, в каком виде окно появится на экране
Слайд 13

Возможные значения параметра nCmdShow

Возможные значения параметра nCmdShow

Слайд 14

Функция CreateWindow Аргумент 1 : указатель на строку с именем класса,

Функция CreateWindow
Аргумент 1 : указатель на строку с именем класса,

к которому принадлежит создаваемое окно
Аргумент 2: указатель на строку текста - заголовка окна
Аргумент 3: стиль окна (индивидуальные характеристики конкретного окна). В файле winuser.h определено несколько десятков стилей; их идентификаторы начинаются с WS.
Аргументы 4-7: положение окна на экране (в пикселях) – отступы верхнего левого угла от левого края, верхней границы, ширина и высота окна.
Аргумент 8: хэндл окна, являющегося родительским по отношению к данному.
Аргумент 9: хэндл меню окна.
Аргумент 10: хэндл экземпляра запускаемой программы.
Аргумент 11: дополнительные данные для некоторых случаев запуска программы.
Слайд 15

Функция ShowWindow Аргумент 1 : хэндл окна Аргумент 2: вид отображения окна на экране

Функция ShowWindow
Аргумент 1 : хэндл окна
Аргумент 2: вид отображения окна

на экране
Слайд 16

Цикл обработки сообщений Сообщение – это структура Поле 1: хэндл окна-адресата

Цикл обработки сообщений
Сообщение – это структура
Поле 1: хэндл окна-адресата
Поле 2:

номер сообщения
Поле 3,4: параметры собщения
Поле 5: время выдачи сообщения
Поле 6: позиция, на которой находится курсор в момент выдачи сообщения