КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |