Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Основна функція програми під ОС Windows

Лекція № 2: Структура програм під ОС Windows

 

План

1. Основна функція програми під ОС Windows.

2. Стандартний цикл обробки повідомлень.

3. Віконна процедура.

4. Основні типи віконних повідомлень.

 

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

- функції WinMain (аналог функції main, що застосовується для консольних програм);

- функції вікна (залежить від типу інтерфейсу SDI, MD, Dialog).

Розглянемо задачі які повинна вирішувати функція WinMain програми, що підтримує одно-документний (SDI) чи багато-документний (MDI) інтерфейс. Наприклад, скорочена стандартна реалізації функції WinMain має вигляд:

 

int WINAPIVinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPTSTR lpCmdLine, int nCmdShow)

{

MSG msg;

 

// Ініціалізація програми – підготовка даних класу вікна і його реєстрація

 

if (!InitApplication(hInstance))

return (FALSE);

 

// Завершення створення копії програми – створення основного вікна

 

if (!InitInstance(hInstance, nCmdShow))

return (FALSE);

 

// Цикл обробки повідомлень

 

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

TranslateMessage(&msg);

DispatchMessage(&msg);

}

 

// Завершення роботи програми – збереження налаштувань

 

ExitInstance(hInstance);

 

return (msg.wParam);

}

 

Функція складається з чотирьох частин:

- реєстрація класу вікна – функція InitApplication;

- створення основного вікна програми - функція InitInstance;

- цикл обробки повідомлень – цикл while;

- збереження налаштувань програми - функція ExitInstance.

Функції реєстрації програми InitApplication та створення основного вікна InitInstance не реалізовані в системі, тому вини повинні бути повністю реалізовані розробником. В бібліотеці MFC реалізовано відповідний клас CwinApp, що відповідає за згадані задачі. Відповідні методи реалізовані в ньому як абстрактні, тому також повинні реалізовуватися розробником.

Нижче наведено типову реалізацію цих функцій:

 

BOOL InitApplication(HINSTANCE hInstance)

{

WNDCLASS wc;

wc.style = CS_HREDRAW | CS_VREDRAW;

wc.lpfnWndProc = (WNDPROC)WndProc;

wc.hInstance = hInstance;

wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION);

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);

wc.lpszMenuName = NULL;

wc.lpszClassName = szAppName;

 

return RegisterClass(&wc);

}

 

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

HWnd = CreateWindow(szAppName, szTitle, WS_OVERLAPPEDWINDOW,

CW_DEFAULT, 0, CW_USERDEFAULT, 0,

NULL, NULL, hInstance, NULL)

if (!hWnd)

return (FALSE);

 

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

 

return (TRUE);

}

 

Функція ExitInstance призначена для звільнення ресурсів, що використовувалися примірником програми, збереження біжучих налаштувань в системному реєстрі для відновлення їх при повторному запуску та інших передбачених розробником дій для коректного завершення програми.

 

<== предыдущая лекция | следующая лекция ==>
Керування графічним виводом | Стандартний цикл обробки повідомлень
Поделиться с друзьями:


Дата добавления: 2013-12-14; Просмотров: 422; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.