Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_progr_Win / Lab1.doc
Скачиваний:
16
Добавлен:
23.03.2015
Размер:
1.51 Mб
Скачать

2.2 Точка входу в програму

Коли програміст створює консольну програму мовою С, від нього жорстко потрібно наявність лише функції main. Операційна система викликає її при запуску програми, і з цього моменту програміст, вірніше його програма, може робити усе по своєму бажанню.

При запуску в Windows операційна система викликає в програмі функцію WinMain. У будь-якому додатку обов'язково повинна бути присутнім ця функція, на яку покладається ряд специфічних задач:

  1. реєстрація класу вікна;

  2. створення і відображення вікна;

  3. обробка повідомлень, переданих програмі операційною системою

Отже, точкою входу програми для Windows є функція WinMain, що завжди визначається в такий спосіб:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPSTR szCmdLine, int iCmdShow)

Ця функція використовує послідовність викликів WINAPI (паскалевскій договір про передачу аргументів при виклику функцій) і, по своєму завершенню, повертає операційній системі Windows ціле число.

Розглянемо призначення параметрів функції WinMain.

— Параметр hInstance називається дескриптором екземпляра додатка. Дескриптором екземпляра додатка - це унікальне число, що ідентифікує програму, коли вона працює під Windows. Кожна копія однієї і той же запущеної кілька разів програми називається “екземпляром” і в кожної своє значення hInstance.

— Параметр hPrevInstance у даний час застарів і в Win32 завжди дорівнює NULL.

— Параметр szCmdLine є покажчиком на рядок, що закінчується нулем, у якому містяться параметри, передані програмі з командного рядка.

— Параметр iCmdShow визначає, як додаток первісно відображається на дисплеї: піктограмою (iCmdShow = SW_SHOWMINNOACTIVE) чи у виді відкритого вікна (iCmdShow = SW_SHOWNORMAL).

Виходить, для початку необхідно створити функцію WinMain(). Для чого у файл sample.cpp додаємо наступний код:

#include <windows.h>

Int winapi WinMain (hinstance hInstance, hinstance hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

}//кінець WinMain

2.3 Реєстрація класу вікна

Як уже говорилося, найважливіша задача функції WinMain – створення основного вікна програми, з яким повинний бути зв'язаний код, здатний обробляти повідомлення, передані операційною системою цьому вікну.

Звичайний додаток створює вікно за два кроки. Спочатку за допомогою функції RegisterClass реєструється клас вікна, а потім створюється саме вікно зареєстрованого класу за допомогою функції CreateWindow.

Клас вікна визначає загальне поводження нового типу вікон, включаючи адресу нової віконної процедури. Такі другорядні аспекти як розмір, розташування і зовнішній вигляд вікна визначаються при його створенні.

Новий клас вікна реєструється при виклику додатком наступної функції:

ATOM RegisterClass(const WNDCLASS *lpwc);

Єдиний параметр цієї функції lpwc указує на структуру типу WNDCLASS, що описує тип нового вікна. Значення, що повертається, є атомом Windows - 16-розрядним значенням, що ідентифікує унікальний символьний рядок у таблиці Windows.

Додамо до функції WinMain код, у якому здійснюється заповнення полів структури, що описує і реєструє клас вікна:

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

static char szAppName[] = "HelloWin";

WNDCLASS wndclass ;

// Заповнення структури WNDCLASS для реєстрації класу вікна.

wndclass.style = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc = WndProc ;

wndclass.cbClsExtra = 0 ;

wndclass.cbWndExtra = 0 ;

wndclass.hInstance = hInstance ;

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName = NULL ;

wndclass.lpszClassName = szAppName ;

RegisterClass (&wndclass) ;

}//кінець WinMain

Соседние файлы в папке Lab_progr_Win