Слайд 2
Венгерская нотация
Каждое слово в имени переменной пишется с
прописной буквы и слитно с другими словами.
Каждый идентификатор
предваряется несколькими строчными буквами, определяющими его тип.
nMyVariable — переменная целого типа
cYourVariable — символьная перемення (char)
pszMyBuffer — указатель на строку с нулевым ограничителем (pointer to string terminated by zero)
Слайд 4
Очередь сообщений
В Windows существует одна общесистемная очередь
сообщений и очереди сообщений у каждого окна (First In
First Out).
Операционная система реализует циклы, в ходе которых опрашивается очередь и выбирается информация о сообщениях в них.
При запуске каждой программы должно быть создано окно и запущен цикл обработки сообщений.
Функция WinMain() является стандартной точкой входа в программы для Windows; функция окна от нее отделена.
Слайд 5
Программа для Windows
WinMain(список аргументов)
{
Подготовка и создание класса окон
с заданными характеристиками
Создание экземпляра окна только что созданного класса
Пока
не произошло необходимое для выхода событие
Опрашивать очередь сообщений и передавать их оконной функции;
Возврат из программы;
}
WindowFunction(список аргументов)
{
Обработать полученное сообщение;
Возврат;
}
Слайд 6
Программа для 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);
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,
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);
/*Начало цикла сообщений*/
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);
{
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);
}
Слайд 12
Программа для Windows
WINAPI — определяет порядок передачи
параметров при вызове процедуры
hInstance HINSTANCE = HANDLE =
void*; условный номер экземпляра программы (хэндл)
hPrevInstance не используется
pszCmdLine — указатель на командную строку, которая набирается после имени запускаемой программы
nCmdShow — определяет, в каком виде окно появится на экране
Слайд 13
Возможные значения параметра nCmdShow
Слайд 14
Функция CreateWindow
Аргумент 1 : указатель на строку
с именем класса, к которому принадлежит создаваемое окно
Аргумент 2:
указатель на строку текста - заголовка окна
Аргумент 3: стиль окна (индивидуальные характеристики конкретного окна). В файле winuser.h определено несколько десятков стилей; их идентификаторы начинаются с WS.
Аргументы 4-7: положение окна на экране (в пикселях) – отступы верхнего левого угла от левого края, верхней границы, ширина и высота окна.
Аргумент 8: хэндл окна, являющегося родительским по отношению к данному.
Аргумент 9: хэндл меню окна.
Аргумент 10: хэндл экземпляра запускаемой программы.
Аргумент 11: дополнительные данные для некоторых случаев запуска программы.
Слайд 15
Функция ShowWindow
Аргумент 1 : хэндл окна
Аргумент 2:
вид отображения окна на экране
Слайд 16
Цикл обработки сообщений
Сообщение – это структура
Поле 1:
хэндл окна-адресата
Поле 2: номер сообщения
Поле 3,4: параметры собщения
Поле 5: время выдачи сообщения
Поле 6: позиция, на которой находится курсор в момент выдачи сообщения