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

Тепер розглянемо, як влаштована віконна процедура wndProc. Її ім'я вже двічі з'являлося в тексті програми. Спочатку був оголошений її прототип, потім воно було привласнене одному з полів структури типа WNDCLASSEX. Поле має типа покажчика на функцію з особливим прототипом віконної функції. Тут корисно пригадати, що ім'я функції трактуючи компілятором C++ як її адреса.

Віконна процедура повинна «просіювати» всі посилані нею повідомлення і обробляти ті з них, які були вибрані програмістом для забезпечення бажаної функціональності. Типовою структурою віконної процедури є switch-блок, кожна гілка якого містить обробку одного повідомлення. У першому наближенні наша віконна процедура реагує лише на три повідомлення:

  • WM_COMMAND - про вибір користувачем однієї з команд меню;
  • WM_PAINT - про необхідність перемальовувати клієнтську зону вікна;
  • WM_DESTROY - про необхідність закрити вікно.

Повідомлення WM_DESTROY (знищити вікно) посилається системою вже після того, як вікно зникло з екрану. Ми реагуємо на нього викликом функції PostQuitMessage, яка вказує системі, що потік додатка вимагає свого завершення, шляхом посилки повідомлення WM_QUIT. Його параметром є код завершення, який ми вказуємо при виклику PostQuitMessage.

Примітка

Розглянута структура додатка Win32 дозволяє зробити вивід, що в переважному числі випадків розвиток додатка зосереджений усередині віконної процедури, а не у функції WinMain. Розвиток додатка полягає в тому, що в число оброблюваних повідомлень (messages) включаються нові. Для цього програміст повинен вставляти нові case-ветви в оператора switch (msg).

Якщо віконна процедура не обробляє яке-небудь повідомлення, то управління передається в гілку default. Ви бачите, що в цій гілці ми викликаємо функцію DefWindowProc, яка носить назву віконної процедури за умовчанням. Ця функція гарантує, що всі повідомлення будуть оброблені, тобто, видалені з черги. Повертане значення залежить від посланого повідомлення.

Ви, звичайно, звернули увагу на велику кількість нових типів даних, які використовуються в додатках Win32. Багато хто з них має префікс Н, який є скороченням слова Handle, - дескриптор, описувач. Описувачі різних типів (HWND, HPEN, HBITMAP і т. д.) є посередниками, які допомагають знайти потрібну структуру даних на віртуальному світі Windows. Об'єкти Windows або її ресурси, такі як вікна, файли, потоки, пір'я, кисті, області, представлені в системі структурами мови З, і адреси цих структур можуть змінюватися. В разі браку реальної пам'яті Windows вивантажує з пам'яті непотрібні в даний момент часу об'єкти і завантажує на їх місце об'єкти, потрібні додатком. У системної області оперативної пам'яті Windows підтримує таблицю, в якій зберігаються фізичні адреси об'єктів. Для пошуку об'єкту і управління їм спочатку слід отримати біля системи його описувач (місце в таблиці, індекс). Поважно мати на увазі, що фізична адреса об'єкту - поняття для Windows, а не для програміста. Описувач типа HANDLE можна уподібнити номеру мобільного телефону, за допомогою якого ви відшукуєте об'єкт, що переміщається на віртуальному світі Windows.

 

рекламодавці:

/ LF KS Рекомендуем дёшево прооперировать вросший ноготь профессиональным врачём

::  Меню ::

Введення

Початок роботи з Visual Studio.Net

Режими відображення координат

Традиційне Windows-приложение

Аналізатор код помилок

Управління файловим деревом

Графіка OPENGL

Тривимірні графіки функцій

Від сирих COM API до проекту ATL

Тривимірна графіка в проекті ATL

З життя студентів

Вирішуємо краєву задачу

Деякі відомості про архітектуру Windows


:: Реклама ::

Створи сайт за допомогою MS Office AsenKat - каталог сайт

:: Статистика ::

Індекс цитування

:: Навигация ::

Головна
Додати у вишукане  

 

 

 


Copyright © Asentli, 2008