Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОВРЕМЕННЫЕ МЕТОДЫ ПРОГРАММИРОВАНИЯ.docx
Скачиваний:
0
Добавлен:
03.01.2020
Размер:
797.27 Кб
Скачать

20.3.Функция WinMain()

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

int WINAPI WinMain (HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow); //классический

//вариант

или

int APIENTRY WinMain (HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow);//вариант

//Visual C++

Параметры функции WinMain():

hInstance - дескриптор (уникальный номер) запущенного приложения,

hPrevInstance - дескриптор предыдущей копии такого же приложения,

lpCmdLine - указатель на командную строку,

nCmdShow - определяет начальный вид окна: 0 – нормальное окно, 7 – окно, свернутое в иконку.

В начале своей работы WinMain() создает и регистрирует в системе главное окно приложения по следующему алгоритму:

     объявление дескриптора окна

HWND hwnd;

     объявление и заполнение структуры оконного класса

WNDCLASSEX ws;

     регистрация оконного класса в системе

RegisterClassEx(&ws);

     создание окна и получение дескриптора окна

hwnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,

//дополнительные атрибуты окна

"Example1", //имя класса окна

"Главное окно", //имя окна

WS_OVERLAPPEDWINDOW, //атрибуты окна

CW_USEDEFAULT, //горизонтальная позиция окна

0, //вертикальная позиция окна

CW_USEDEFAULT, //ширина окна

0, //высота окна

NULL, //родительское окно

NULL, //меню

hInst, //экземпляр приложения

NULL); //дополнительные данные окна

     отображение окна на экране

ShowWindow(hwnd, nCmdShow);

     обновление элементов управления окна

UpdateWindow(hwnd);

Функция WinMain() выполняет следующие действия:

o    Объявление структуры для хранения сообщения MSG msg;

o    Создание и регистрация главного окна приложения (рассмотрено ранее);

o    Выполнение цикла обработки сообщений

while (GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

o    Завершение WinMain()

return msg.wParam;

20.4. Оконная процедура

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

Функции, вызываемые операционной системой, называются функциями обратного вызова, и для обозначения таких функций используется модификатор CALLBACK. Оконная процедура – это функция обратного вызова.

Оконная процедура имеет следующую структуру:

LRESULT CALLBACK WndProc (HWND hwnd,//дескриптор

//окна

UINT iMsg, //идентификатор сообщения

WPARAM wParam, //параметр сообщения

LPARAM lParam ) //параметр сообщения

{

//объявления переменных

switch(iMsg)

{

case WM_COMMAND:

… //обработка сообщения

break;

case WM_PAINT:

… //обработка сообщения

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hwnd,iMsg,wParam,lParam);

}

return 0;

}

Оконная процедура получает идентификатор сообщения и выполняет ветвь инструкции switch, соответствующую этому сообщению. Если в инструкции switch такая ветвь отсутствует, обработка сообщения выполняется по умолчанию функцией DefWindowProc(). Значения параметров wParam и lParam зависят от того, какое именно сообщение получено; при обработке одних сообщений эти параметры используются, при обработке других сообщений – нет. Обработка сообщения WM_DESTROY, возникающего при завершении работы программы, заключается в исполнении функции PostQuitMessage(), которая помещает в очередь сообщений приложения сообщение WM_QUIT, останавливающее цикл обработки сообщений приложения.

К началу главы