Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра АСУ
Звіт до
лабораторної роботи №4
з курсу « Системного програмування»
на тему «Стандартні класи вікон та їх типи.»
Львів 2014
Мета роботи: зрозуміти поняття вікна в операційній системі Windows.
ТЕОРЕТИЧНІ ПОЛОЖЕННЯ
Все, що бачить користувач на екрані в системі WINDOWS є вікном. Вікно – це графічна оболонка, через яку програма може спілкуватися з користувачем. Якщо програмі не потрібно спілкуватись, то вона може і не створювати вікна. Вікно може володіти набором інших вікон, які називаються дочірніми (кнопки, рядки вводу, і т.д.).
Кожне вікно має власний набір властивостей який відрізнятися певною специфікою спілкування з користувачем. Такі специфічні особливості називаються класом вікна. Існують стандартні класи, наприклад, вікно–регулювач, вікно-кнопка, вікно для вводу тексту, вікно-підказка та інші. Кожний стандартний клас має унікальну назву, яка дійсна для всіх версій операційних систем WINDOWS. Нижче приведено перелік стандартних класів вікона:
BUTTON Стандартна прямокутня кнопка
COMBOBOX Комбінований список з полем редагування у верхній частині або випадний список вибору.
EDIT Прямокутний елемент редагування для введення тексту користувачем. Може містити одну або декілька рядків.
LISTBOX Елемент типу список. Елемент управління, що містить список рядків, які можуть бути вибрані.
MDICLIENT Клієнтське вікно багатодокументного інтерфейсу (MD1 — multiple-document
interface). Це вікно отримує повідомлення, які управляють дочірніми вікнами багатодокументного інтерфейсу в застосуванні. Для правильної роботи застосування багатодокументного інтерфейсу необхідно створити вікно MIDIСLIENT.
RICHEDlT Елемент управління Rich Edit версії 1.0. Елемент управління такого типу дозволяє редагувати текст з багатьма шрифтами і стилями. У Windows 2000 елемент управління цього типу емулює версію 1.0 на основі версії 3.0.
SCROLLBAR Елемент управління лінійкою прокрутки.
STATIC Елемент управління статичним текстом. Застосовується для розміщення у вікні тексту або рамок.
Для створення вікна використовується функція CreateWindowEx. Опис функції можна знайти у довіднику.
Це все добре, але як створити вікно з кнопками, рядками вводу і т.п., і заставити виконувати певну дію, наприклад, при натисненні кнопки або руханні мишки над вікном?
Розберемося як будувати складні вікна.
Першим кроком потрібно створити новий клас вікна, оскільки такого екземпляру у системі немає. Мається на увазі, є стандартні вікна, типу "кнопка", "рядок вводу", але немає стандартного вікна, який би містив в собі, наприклад, кнопку і рядок вводу. Для створення нового класу використовується процедура RegisterClassEx. Хоча документацію по функціям можна знайти у довіднику, для зрозумілості кожну функцію розглянемо детально.
Другим кроком, потрібно на основі нового класу створити так зване "батьківське" вікно, тобто, вікно на якому будуть розташовані "дочірні" об’єкти (вікна).
Дочірні - це вікна які розташовані на батьківському вікні та підпорядковані йому. Батьківське вікно обробляє всі повідомлення дочірнього вікна.
Як вище було згадано, для створення вікна використовується функція
Третім кроком, нам потрібно відфільтровувати повідомлення для нашої програми забирати з системи та відправляти їх на обробку у віконну процедуру. Цю дію виконує процедура GetMessage.
Четвертим кроком буде перетворення віртуально-ключових повідомлень у повідомлення символів. Це робиться за допомогою процедури TranslateMessage.
Останнім п’ятим кроком буде відправлення повідомлення у процедуру вікна за допомогою процедури DispatchMessage.
Кроки 3,4,5 потрібно виконувати в циклі до тип пір поки функція GetMessage не поверне значення "0" або "-1".
Тепер приступимо до найважливішої частини програми.
Наступним кроком є створення процедури обробки повідомлень. Назва функції може бути довільна, але ця назва має фігурувати у коді програми при реєстрації класу(поле структури WNDCLASSEX – lpfnWndPro...