Предмет:
Тип роботи:
Лабораторна робота
К-сть сторінок:
25
Мова:
Українська
justify;">Параметри функції CreateWindow:
1) Перший параметр lpClassName вказує ім'я класу, поводження якого успадковує дане вікно. Цей клас повинен бути зареєстрований за допомогою функції RegisterClass.
2) Параметр lpWindowName визначає рядок, що виводиться в заголовку створюваного вікна.
3) Параметр dwStyle визначає стиль вікна. Не слід плутати стиль вікна зі стилем класу, переданим у RegisterClass через структуру WNDCLASS.
Хоча стиль класу визначає деякі постійні властивості вікон, що належать класу, стиль вікна, переданий CreateWindow, використовується для ініціалізації локальних властивостей вікна.
Як і у випадку стилю класу, стиль вікна також звичайно є комбінацією значень (об'єднаних операцією порозрядного АБО).
Зауваження. Для визначення стилю головного вікна найчастіше використовують стиль вікна, що перекривається, для чого через параметр dwStyle передають символічну константу WS_OVERLAPPEDWINDOW, визначену у файлах, що включаються, у такий спосіб:
#define
WS_OVERLAPPEDWINDOW (
WS_OVERLAPPED| \ //вікно що перекриває
WS_CAPTION|\ //вікно має рядок заголовка
WS_SYSMENU|\ //вікно має системне меню
WS_THICKFRAME| \ //вікно має товсту рамку
WS_MINIMIZEBOX|\ //кнопка мінімізації
WS_MAXIMIZEBOX) //кнопка максимізації
4-7) Після вказівки типу вікна потрібно задати початкові геометричні розміри вікна. Якщо при завданні параметрів x, y, nWidth і nHeight використовувати константу CW_USEDEFAULT, то Windows установить розташування і розміри вікна самостійно.
8) При створенні вікна вказуються також дескриптори його вікна-батька і меню. Якщо вікно є головним вікном додатка, то параметру hWndParent привласнюється значення NULL.
9) Значення NULL на місці дескриптора меню hMenu говорить про те, що у вікна буде тільки меню класу, загальне для усіх вікон цього класу.
10) При створенні вікна необхідно вказати екземпляр додатка, що створює вікно, що і робиться за допомогою параметра hInstance.
11) Останній параметр lpParam використовується для передачі вікну додаткових даних (якщо їх нема, то він повинний дорівнювати NULL). При необхідності цей параметр використовується як покажчик на які-небудь дані, на які програма надалі могла б посилатися.
2.5. Відображення вікна
Хоча функція CreateWindow і створює вікно, це не означає, що воно буде автоматично відображатися на екрані дисплея. Для відображення вікна варто скористатися функцією ShowWindow. Першим параметром у цю функцію передається дескриптор вікна, другим параметром звичайно (для головного вікна додатка) є величина, передана як параметр функції WinMain, вона задає початковий вид вікна на екрані.
BOOL ShowWindow (HWND hwnd, int nCmdShow) ;
Функція ShowWindow виводить вікно на екран. Якщо другий параметр цієї функції має значення SW_SHOWNORMAL, то фон робочої області вікна зафарбовується тією кистю, що задана в класі вікна.
Для перемальовування робочої області потім необхідно зробити виклик функції:
void UpdateWindow (HWND hwnd) ;
Функція UpdateWindow передає функції вікна повідомлення WM_PAINT. Одержавши це повідомлення, функція обновляє вміст робочої області.
Додайте наступний код до функції WinMain, у якому здійснюється відображення створеного вікна і перемальовування вмісту його робочої області:
…
NULL, // Дескриптор меню вікна
hInstance, // Дескриптор екземпляра програми
NULL) ;
ShowWindow (hWnd, iCmdShow) ; // Відображаємо вікно
UpdateWindow (hWnd) ; // Обновляємо його вміст клієнтської області вікна
} //кінець WinMain
Функції відображення і відновлення викликаються, як правило, після створення вікна, але, узагалі говорячи, порядок і місце виклику функцій ShowWindow і UpdateWindow не є обов'язковим. Вікно може бути відображено не в момент створення, а пізніше, за бажанням програміста.
Отже, для відображення вікна в типовому додатку необхідно:
Зареєструвати клас вікна функцією RegisterClass.
Створити вікно функцією CreateWindow.
Відобразити вікно функцією ShowWindow.
Обновити робочу (клієнтську) область вікна функцією UpdateWindow.
2.6. Цикл обробки черги повідомлень
Після створення і відображення вікна функція WinMain повинна підготувати додаток до одержання інформації від користувача через клавіатуру і мишу.
Windows підтримує чергу повідомлень (message queue) для кожної програми, що працює в даний момент у системі. Коли відбувається введення інформації, Windows перетворює її у повідомлення, що міститься в черзі повідомлень додатка.
Програма витягає повідомлення з черги повідомлень, виконуючи блок команд, відомий як цикл обробки повідомлень (message loop). Додайте до функції WinMain найпростіший цикл обробки повідомлень, що має наступний вигляд:
...
static char szAppName[] = «HelloWin»;
HWND hWnd;
MSG msg;
WNDCLASS wndclass;
…
ShowWindow (hwnd, iCmdShow) ; // Відображаємо вікно.
UpdateWindow (hwnd) ; // Обновляємо його вміст клієнтської області вікна
while (GetMessage (&msg, NULL, 0, 0))
{ TranslateMessage (&msg) ;
DispatchMessage (&msg) ; }
} //кінець WinMain
Розглянемо, як саме працює цикл обробки повідомлень Windows-додатка.
Цикл обробки починається з витягу повідомлень із черги за допомогою функції:
BOOL GetMessage (MSG FAR* lpmsg, HWND hwnd, UINT uMsgFilterMin, UINT uMsgFilterMax) ;
Якщо при виклику цієї функції вказати другим аргументом NULL, то програма буде одержувати повідомлення від усіх вікон, створених програмою. За допомогою параметрів uMsgFilterMin і uMsgFilterMax можна отфільтрувати повідомлення, одержувані програмою. Якщо на їхньому місці передати 0, то програма буде одержувати всі повідомлення.
Після виклику функції GetMessage додаток заповнює структуру msg типу MSG