Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Типи даних в Windows




У Windows-програмах взагалі (і в які використовують бібліотеку MFC зокрема) не надто широко застосовуються стандартні типи даних з С або С + +, такі як int або char *. Замість них використовуються типи даних, визначені в різних бібліотечних (header) файлах. Найбільш часто використовуваними типами є HANDLE, HWND, BYTE, WORD, DWORD, UNIT, LONG, BOOL, LPSTR і LPCSTR.

- Тип HANDLE позначає 32-розрядне ціле, використовуване як дескриптора. Є кілька схожих типів даних, але всі вони мають ту ж довжину, що і HANDLE, і починаються з літери Н.

Дескриптор - це просто число, що визначає деякий ресурс.

- Наприклад, тип HWND позначає 32-розрядне ціле - дескриптор вікна. У програмах, які використовують бібліотеку MFC, дескриптори застосовуються не настільки широко, як це має місце в традиційних програмах.

- Тип BYTE позначає 8-розрядне беззнакове символьне значення

- Тип WORD - 16-розрядне беззнакове коротке ціле,

- Тип DWORD - беззнакове довге ціле,

- Тип UNIT - беззнакове 32-розрядне ціле.

- Тип LONG еквівалентний типу long.

- Тип BOOL позначає ціле і використовується, коли значення може бути або істинним, або хибним.

- Тип LPSTR визначає покажчик на рядок,

- Тип LPCSTR - константний (const) покажчик на рядок.

4. Переваги використання MFC (самостійно)

Головна частина бібліотеки MFC складається з класів, використовуваних для побудови компонентів додатка. З кожним MFC-додатком зв'язується визначає його на верхньому рівні об'єкт theApp, що належить класу, похідного від CWinApp.

Як правило, структура додатка визначається архітектурою Document-View (документ-вигляд). Це означає, що додаток складається з одного або декількох документів - об'єктів, класи яких є похідними від класу CDocument (клас "документ"). З кожним з документів пов'язані один або кілька видів - об'єктів класів, похідних від CView (клас "зовнішність") і визначають вигляд документа.

Клас CFrameWnd ("вікна-рамки") і похідні від нього визначають вікна-рамки на дисплеї. Елементи управління, створювані при проектуванні інтерфейсу користувача, належать сімейству класів елементів управління. З'являються в процесі роботи додатка діалогові вікна - це об'єкти класів, похідних від CDialog.

Класи CView, CFrameWnd, CDialog і всі класи елементів управління успадковують властивості і поведінку свого базового класу CWnd ("вікно"), визначального по суті Windows-вікно. Цей клас в свою чергу є спадкоємцем базового класу CObject ("об'єкт").

Одна з труднощів у розумінні принципів устрою MFC-додатки, полягає в тому, що об'єкти, з яких воно будується, успадковують властивості та поведінку всіх своїх предків, тому необхідно знати базові класи.

Як уже згадувалося, MFC - це базовий набір (бібліотека) класів, написаних на мові С + + і призначених для спрощення і прискорення процесу програмування для Windows. Бібліотека містить багаторівневу ієрархію класів, що налічує близько 200 членів. Вони дають можливість створювати Windows-додатки на базі об'єктно-орієнтованого підходу. З точки зору програміста, MFC являє собою каркас, на основі якого можна писати програми для Windows.

Бібліотека MFC розроблена для спрощення завдань, що стоять перед програмістом. Як відомо, традиційний метод програмування під Windows вимагає написання досить довгих і складних програм, що мають ряд специфічних особливостей. Зокрема, для створення тільки каркаса програми таким методом знадобиться близько 75 рядків коду. У міру ж збільшення складності програми її код може досягати воістину неймовірних розмірів. Однак та ж сама програма, написана з використанням MFC, буде приблизно в три рази менше, оскільки більшість приватних деталей приховано від програміста.

Однією з основних переваг роботи з MFC є можливість багаторазового використання одного і того ж коду. Так як бібліотека містить багато елементів, загальних для всіх Windows-додатків, немає необхідності кожен раз писати їх заново. Замість цього їх можна просто наслідувати (говорячи мовою об'єктно-орієнтованого програмування). Крім того, інтерфейс, забезпечуваний бібліотекою, практично незалежний від конкретних деталей, його реалізують. Тому програми, написані на основі MFC, можуть бути легко адаптовані до нових версій Windows (на відміну від більшості програм, написаних звичайними методами).

Ще однією істотною перевагою MFC є спрощення взаємодії з прикладним програмним інтерфейсом (API) Windows. Будь-який додаток взаємодіє з Windows через API, який містить кілька сот функцій. Значний розмір API ускладнює спроби зрозуміти і вивчити його цілком. Часто навіть складно простежити, як окремі частини API пов'язані один з одним! Але оскільки бібліотека MFC об'єднує (шляхом інкапсуляції) функції API в логічно організоване безліч класів, інтерфейсом стає значно легше управляти.

Оскільки MFC являє собою набір класів, написаних на мові С + +, тому програми, написані з використанням MFC, повинна бути в той же час програмами на С + +. Для цього необхідно володіти відповідними знаннями. Для початку необхідно вміти створювати власні класи, розуміти принципи спадкування і вміти перевизначити віртуальні функції. Хоча програми, що використовують бібліотеку MFC, звичайно не містять занадто специфічних елементів з арсеналу С + +, для їх написання проте потрібні солідні знання в даній області.

Зауваження. Невелике число класів, визначених у бібліотеці, не пов'язане безпосередньо з програмуванням під Windows. Це, зокрема, класи, призначені для створення рядків, управління файлами і обробки особливих ситуацій. Іноді звані класами загального призначення, вони можуть використовуватися як Windows-, так і не-Windows-додатками.

 

5. Архітектура додатка

У всіх Windows-додатків фіксована структура, визначувана функцією WinMain. Структура додатка, побудованого з об'єктів класів бібліотеки MFC, є ще більш визначеною.

Додаток складається з об'єкта theApp, функції WinMain, і деякої кількості інших об'єктів. Серцевина додатки - об'єкт theApp - відповідає за створення всіх інших об'єктів і обробку черги повідомлень. Об'єкт theApp є глобальним і створюється ще до початку роботи функції WinMain. Робота функції WinMain полягає в послідовному виклику двох методів об'єкта theApp: InitInstance і Run. У термінах повідомлень можна сказати, WinMain посилає об'єкту theApp повідомлення InitInstance, яке приводить в дію метод InitInstance.

Отримавши повідомлення InitInstance, theApp створює внутрішні об'єкти додатка. Процес створення виглядає як послідовне породження одних об'єктів іншими. Набір об'єктів, породжуваних на початку цього ланцюжка, визначений структурою MFC практично однозначно - це головна рамка, шаблон, документ, зовнішність.

Наступне повідомлення, що отримується theApp, - Run - приводить в дію метод Run. Воно як би говорить об'єкту: "Починай роботу, починай процес обробки повідомлень з зовнішнього світу". Об'єкт theApp циклічно вибирає повідомлення з черги і ініціює обробку повідомлень об'єктами докладання.

Деякі об'єкти мають графічний образ на екрані, з яким може взаємодіяти користувач. Ці інтерфейсні об'єкти зазвичай пов'язані з Windows-вікном. Серед них особливо важливі головна рамка і зовнішність. Саме їм об'єкт насамперед розподіляє повідомлення з черги через механізм Windows-вікон і функцію Dispatch.

Коли користувач вибирає команду меню вікна головної рамки, то виникають командні повідомлення. Вони відправляються спочатку об'єктом theApp об'єкту головна рамка, а потім обходять по спеціальному маршруту цілий ряд об'єктів, серед яких першими є документ і подобу, інформуючи їх про що прийшла від користувача команді.

При роботі додатка виникають і звичайні дзвінки одними об'єктами методів інших об'єктів. В об'єктно-орієнтованої термінології такі виклики можуть називатися повідомленнями. В Visual C + + деяким методам приписаний саме цей статус (наприклад, методом OnDraw).

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

6. Типи майстрів проектів (самостійно)

У середовищі Visual C + + можна будувати різні типи проектів. Такі проекти після їх створення можна компілювати і запускати на виконання. Фірма Microsoft розробила спеціальний інструментарій, що полегшує і прискорює створення проектів у середовищі Visual C + +.

Розглянемо деякі типи проектів, які можна створювати за допомогою різних засобів (майстрів проектів) Microsoft Visual C + +:

MFC AppWizard (exe) - за допомогою майстра додатків можна створити проект Windows-додатка яке має однодокументних, багатодокументний або діалоговий інтерфейс. Однодокументний додаток може надавати користувачеві в будь-який момент часу працювати тільки з одним файлом. Багатодокументний додаток, навпаки, може одночасно представляти декілька документів, кожний у власному вікні. Інтерфейс користувача діалогового додатка являє собою єдине діалогове вікно.

MFC AppWizard (dll) - цей майстер додатків дозволяє створити структуру DLL, засновану на MFC. За допомогою нього можна визначити характеристики майбутньої DLL.

AppWizard ATL COM - це засіб дозволяє створити елемент керування ActiveX або сервер автоматизації, використовуючи нову бібліотеку шаблонів ActiveX (ActiveX Template Library - ATL). Опції цього майстра дають можливість вибрати активний сервер (DLL) або виконуваний зовнішній сервер (exe-файл).

Custom AppWizard - за допомогою цього засобу можна створити користувальницькі майстра AppWizard. Користувальницький майстер може базуватися на стандартних майстрах для додатків MFC або DLL, а також на існуючих проектах або містити тільки визначені розробником кроки.

DevStudio Add-in Wizard - майстер доповнень дозволяє створювати додатки до Visual Studio. Бібліотека DLL розширень може підтримувати панелі інструментів і реагувати на події Visual Studio.

MFC ActiveX ControlWizard - майстер елементів управління реалізує процес створення проекту, що містить один чи декілька елементів управління ActiveX, заснованих на елементах керування MFC.

Win32 Application - цей майстер дозволяє створити проект звичайного Window-додатки. Проект створюється незаповненим, файли з вихідним кодом в нього слід додавати вручну.

Win32 Console Application - майстер створення проекту консольного застосування. Консольна додаток - це програма, яка виконується з командного Рядок вікна DOS або Windows і не має графічного інтерфейсу (вікон). Проект консольного застосування створюється порожнім, припускаючи додавання файлів вихідного тексту в нього вручну.

Win32 Dynamic-Link Library - створення порожнього проекту динамічно підключається бібліотеки. Установки компілятора і компонувальника будуть налаштовані на створення DLL. Вихідні файли слід додавати вручну.

Win32 Static Library - це засіб створює порожній проект, призначений для генерації статичної (об'єктної) бібліотеки. Файли з вихідним кодом в нього слід додавати вручну.

 

Переваги майстрів проектів

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

Наприклад, всі Windows-програми мають досить загальну структуру, і, отже, можна побудувати деякі шаблонні заготовки, що підходять для того чи іншого типу проектів. Побудови таких заготовок сприяє те, що додатки, створювані на основі MFC, будуються з елементів фіксованих класів. Логічним розвитком цієї ідеї було введення спеціальних класів і спеціальної архітектури побудови програми, яка підходила б широкого класу застосувань. Про таку архітектурі вже згадувалося, коли йшлося про бібліотеку MFC, - це архітектура Document-View. Вона є основною, але не єдиною при побудові проектів в середовищі Visual C + +.

Суть цієї архітектури в тому, що роботу багатьох додатків можна розглядати як обробку документів. При цьому можна відокремити сам документ, який відповідає за подання і зберігання даних, від образу цього документа, видимого на екрані і допускає взаємодія з користувачем, який переглядає і (або) редагує документ. Відповідно до цієї архітектурою бібліотека MFC містить два сімейства класів, похідних від базових класів CDocument і CView.

У результаті з'явилася двоетапна технологія створення проектів. Спочатку створюється якась заготовка проекту із загальними властивостями, придатними для багатьох проектів цього типу. На другому етапі проводиться вже настройка, враховує специфіку задачі. Для кожного етапу фірма Microsoft розробила свій інструментальний засіб.

Початкова заготовка - остов додатки - створюється в діалозі з користувачем інструментальним засобом AppWizard. В процесі діалогу користувач визначає тип і характеристики проекту, який він хоче побудувати. Визначивши, які класи з MFC необхідні для цього проекту, AppWizard будує остови всіх потрібних похідних класів. Побудований AppWizard остов додатка містить всі необхідні файли для створення стартового додатка, який є закінченим додатком і володіє розумними функціональними властивостями, спільними для цілого класу додатків. Природно, ніяких специфічних для даного застосування властивостей остов не містить. Вони з'являться на наступному етапі, коли програміст почне працювати з остовом, створюючи з заготівлі своє власне застосування. Тим не менш стартове додаток можна транслювати і запускати на виконання.

Термін остов (додатки, класу, функції) застосовується для заготовок, створюваних інструментальними засобами AppWizard і ClassWizard. Потрібно підкреслити - остов додатки і каркас додатка - різні поняття.

Створюваний остов додатка складений так, що в подальшій роботі з проектом можна використовувати інше інструментальне засіб - ClassWizard (майстер-класів).

 

7. Обробка подій в додатках класу MFC

Потім розглядається введення за допомогою миші. Завдяки бібліотеці базових класів Місrosoft (МFС - Місrosoft Faundetion Classes) часи низькорівневого коду обробки подій миші залишилися у далекому минулому (безумовно, якщо у розробника достатньо вільного часу, він може дозволити собі і таку розкіш). У даному розділі описуються методи МFС, що забезпечують контроль і маніпулювання мишею, а також розглядаються такі питання, як зовнішній вигляд (форма) курсору миші, захоплення миші і обмеження переміщення курсору миші.

І на закінчення розглянемо способи, що дозволяють додатком використовувати введення з клавіатури. Застосовуючи такі елементи користувальницького інтерфейсу, як поле введення, можна надати Windows і МFС можливість самостійно виконувати всі завдання по обробці введення з клавіатури. Однак досить часто буває необхідний більш жорсткий контроль над подіями клавіатури. В ході обговорення цієї теми будуть порушені такі поняття, як фокус введення з клавіатури (Keyboard focus), текстовий курсор (точка вводу) (keyboard kursor (insertion point)), стан виділення (selection stste) і багато інших елементів конструкції для користувача інтерфейсу, пов'язані з введенням з клавіатури.

Термін керований подіями (event-driven) означає, що при кожному натисканні користувачем клавіші або клацанні мишею замість коду опитування, відповідного натисненню клавіш або клацання мишею, операційна система передає додатком повідомлення Windows (WM - windows message).

Бібліотека MFC співвідносить (map) повідомлення Windows з функціями С + +, званими обробниками повідомлень (message handler). Оператори, що обробляють дані, що вводяться в додаток, розташовані саме в цих функціях-обробниках повідомлень.

Повідомлення миші

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

Позиція миші відображається на екрані за допомогою покажчика, який за замовчуванням має форму стрілки. Кінець стрілки називається активною точкою (hotspot), оскільки він відповідає реальній точки для стандартної

Всі операції, пов'язані з мишею, виконуються виходячи з поточних координат активної точки. Перелічимо основні операції з мишею, оскільки для кожної з них генеруються свої власні повідомлення:

• Клацання - Натискання й відпускання кнопки миші

• Подвійне клацання - Два послідовних натиснення і відпускання кнопки миші, пауза між кото римі не перевищує заданого значення

• Переміщення - Рух миші без натискання на кнопки

• Перетягування - Рух миші при натиснутій кнопці

Ці операції визначають типи повідомлень, які генеруються Windows при відповідних подіях, пов'язаних з мишею. Повідомлення миші поділяються на два класи: повідомлення для робочої області вікна та повідомлення для службової області вікна. Повідомлення для робочої області вікна використовуються значно частіше, тому їм буде приділено першочергову увагу. У табл. 8.2 приведений список

 

Повідомлення WM_MOUSEMOVE передається в тому випадку, коли покажчик миші переміщується в робочій області вікна. Повідомлення WM_MOUSEACTIVATE передається в разі клацання над вікном, яке до цього було неактивним, в результаті чого вікно стає активним. Повідомлення WM_MOUSEHOVER і WM_MOUSELEAVE передаються у відповідь на трасування миші при виклику функції TrackMouseEvent (). Повідомлення WM_MOUSEHOVER генерується в тому випадку, якщо протягом заданого періоду часу трасування покажчик миші не виходив за межі зазначеної прямокутної області. Зазвичай це со спілкування служить для виклику контекстних підказок. Повідомлення WM_MOUSELEAVE генерується в тому випадку, якщо протягом заданого періоду часу трасування покажчик миші виходить за межі робочої області вікна.

Решта повідомлення пов'язані з обертанням коліщатка прокрутки і клацаннями на кнопках миші. Коліщатко прокрутки - це порівняно нове удосконалення миші, яке вперше з'явилося в моделі Microsoft Intcllimouse. При обертанні коліщатка прокрутки генерується повідомлення WM_MOUSEWHEEL, що містить інформацію про вугілля повороту. У більшості додатків це коліщатко використовується як альтернатива смугах прокрутки. Іншими словами, поворот коліщатка еквівалентний клацанню на стрілці в кінці смуги прокрутки.

Повідомлення WM_XBUTTONDOWN передаються в результаті натискання кнопки миші в межах робочої області вікна, а повідомлення WM_XBUTTONUP передаються при відпуску кнопки. Повідомлення WMXBUTTONDBLCLK генеруються при подвійному натисканні в робочій області вікна. Всі ці повідомлення існують в трьох варіантах, відповідних лівої, правої і середньої кнопок. У багатьох типів миші середня кнопка відсутня, тому вони не можуть порушити відповідні повідомлення.

Нижче представлено оголошення процедури OnMouseMoveQ, r якому зазначені параметри, які використовуються більшістю підпрограм обробки повідомлень миші:

afxmsg void OnMouseMove (UINT nFlags, CPoint point);

Параметр nFlags відповідає натисканню різних віртуальних клавіш. Цей параметр може містити довільну комбінацію наступних прапорів:

• MK_LBUTTON - встановлюється при натисненні лівої кнопки миші

• М КМ У UTTON - встановлюється при натисканні середньої кнопки миші

• MK_RBUTTON - встановлюється при натисненні правої кнопки миші

• MK_CONTROL - встановлюється при натисканні клавіші Ctrl

• MK_SHIFT - встановлюється при натисканні клавіші Shift

Другий параметр, point, містить координати х і в покажчика миші. Ці координати відповідають ті Кучок позиції активної точки. Вони відраховуються відносно лівого верхнього кута вікна, над яким знаходиться покажчик миші.

Введення за допомогою миші

 

Як вже говорилося, Windows повідомляє вікна програм про дії користувача, посилаючи їм повідомлення, що зберігаються в апаратній черзі введення (input queue). Табл. 1 містить список основних повідомлень Windows для миші, оброблювачі яких використовуються для організації реакції на дії користувача.

Таблиця 1 - Повідомлення Windows для миші

Імена повідомлень починаються із префікса WM (Windows Message), що вказує, що це повідомлення Windows.

Використання методів ClassWizard для роботи з мишею Створіть проект SDI-програми з ім'ям mouser. Наділіть її тими ж функціями роботи з клавіатурою, що і попередню програму carets; інакше кажучи, що вводяться користувачем символи повинні зберігатися в об'єкті документа St ringData.

Крім того, додайте методи OnKillFocus () і OnSetFocus () і включіть в них виклики HideCaret () і ShowCaret (), як це було зроблено в попередній програмі (можна скопіювати необхідні фрагменти коду). Перейдемо до відображення даних, що вводяться користувачем.

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

ClassWizard і додати метод для обробки повідомлення Windows WM_LBUTT0ND0WN;

ClassWizard присвоює йому ім'я OnLButtonDown ().

Запустіть ClassWizard (рис. 4.3).

Простежте, щоб у списку Class name був обраний клас виду CMouserView, і знайдіть у списку Messages повідомлення WM_LBUTT0ND0WN. Двічі клацніть на його імені; при цьому створюється і виводиться в списку Member functions метод OnLButtonDown ().

Двічі клацніть на рядку з eFO ім'ям OnLButtonDown (), щоб перейти до коду:

void CMouserView :: OnLButtonDown (UINT nFlags, CPoint point)

{

/ / TODO: додайте код обробки повідомлення

/ / І / або викличте обробник за умовчанням

CView: :0nl_ButtonDown(nFlags, point);

}

Крім методу OnLButtonDown (), можна використовувати й інші методи для роботи з мишею - OnLButtonUp (), що відповідає за обробку відпускання лівої кнопки миші, OnRButtonDownO, відповідний натискання правої кнопки миші, OnLButtonDblClick (), що обробляє подвійне клацання лівою кнопкою, і т. д .

 

Методи для роботи з мишею перераховані в табл. 2.

Методом OnLButtonDown () передаються два параметри, nFlags і point. Перший містить інформацію про стан різних службових клавіш і може приймати наступні значення:

MK_C0NTR0L Натиснуто клавіша Ctrl

MK_LBUTTON Натиснуто ліва кнопка миші

MK_MBUTTON Натиснуто середня кнопка миші

MK_RBUTTON Натиснуто права кнопка миші

MK_SHIFT Натиснуто клавіша Shift

 

Параметр point, об'єкт класу CPoint, містить поточні координати покажчика миші.

Отже, кнопка миші натиснута. Першою справою необхідно зберегти поточне положення вказівника. Ми скористаємося змінними х і в і присвоїмо їм значення, отримані зі змінних х і у об'єкту point:

void CMouserView :: OnLButtonDown (UINT nFlags, CPoint point)

{

/ / TODO: додайте код обробки повідомлення

/ / І / або викличте обробник за умовчанням

х = point.х;

у = point.у;

...

}

Змінні для зберігання координат оголошуються в заголовному файлі виду

mouserView.h:

/ / MouserView.h: інтерфейс класу CMouserView

...

protected: / / створення тільки при серіалізациі

CMouserViewO;

DECLARE_DYNCREATE (CMouserView)

CPoint CaretPosition;

boolean CaretCreated;

int x, у;

...

Клацання мишею означає, що текст буде виводитися в новому положенні, - для очищення строкового об'єкта ми скористаємося методом Empty () класу CString:

void CMouserView :: OnLButtonDown (UINT nFlags, CPoint point)

{

/ / TODO: додайте код обробки повідомлення

/ / І / або викличте обробник за умовчанням

х = point.х;

у = point.у;

CMouserDoc * pDoc = GetDocument ();

ASSERT__VALID (pDoc);

pDoc-> StringData.Empty ();

}

Залишається лише оголосити поточний стан виду недійсним, щоб

перемалювати його і відобразити курсор в новому місці (відповідний код був доданий в метод OnDraw ()):

void CMouserView :: OnLButtonDown (UINT nFlags, CPoint point)

{

/ / TODO: додайте код обробки повідомлення

/ / І / або викличте обробник за умовчанням

х = point.х;

у = point.у;

CMouserDoc * pDoc = GetDocument ();

ASSERT_VALID (pDoc);

pDoc-> StringData.Empty ();

Invalidate ();

CView :: 0nl_ButtonDown (nFlags, point);

}

Координати покажчика миші збережені. Наступний крок - виведення в місці, обраному користувачем.

 

Обробка повідомлень

 

Давайте тепер зробимо так, що б наша програма, створена на попередній лекції, звертала увагу на наші дії.

Відкриємо проект, створений і збережений на минулому занятті. File-> Open Workspace ... -> ім'я файла.dsw

 

Створимо, наприклад, щоб при клацанні мишкою вискакував MessageBox (вікно повідомлення).

Для цього в наш клас вставте наступний строчки:

 

class CMyMainWnd : public CFrameWnd

{

public:

CMyMainWnd()

{

Create(NULL,"My title");

}

afx_msg void OnLButtonDown(UINT, CPoint);

DECLARE_MESSAGE_MAP()

};

 

Далі після класу напишіть

 

BEGIN_MESSAGE_MAP (CMyMainWnd, CFrameWnd) ON_WM_LBUTTONDOWN () END_MESSAGE_MAP ()

 

І, нарешті, в кінці файлу додайте рядки

 

CMyApp theApp; void CMyMainWnd :: OnLButtonDown (UINT, CPoint)

{

AfxMessageBox ("Ліва кнопка миші");

}

 

Відкомпілюйте додаток (Ctrl + F5). При натисненні лівої кнопки миші у вікні повинен вискочити MessageBox з написом "Ліва кнопка миші".

Давайте тепер обговоримо код. Для того, щоб наш клас звертав увагу на наші дії, ми повинні зробити наступні дії.

Перше. Ми повинні вставити в кінець нашого класу макрос DECLARE_MESSAGE_MAP (). Це досить зробити один раз. Цей макрос в класі і означає, що цей клас буде реагувати на деякі повідомлення.

Друге. Ми повинні десь після класу додати два макроси BEGIN_MESSAGE_MAP () і END_MESSAGE_MAP (). Це теж досить зробити тільки один раз. Це так звана карта повідомлень. У перший макрос першим параметром ви повинні вставити ім'я вашого класу, другим - ім'я батьківського класу. Перший параметр показує, для якого класу ми пишемо нашу карту повідомлень, а другий - хто повинен обробляти те або інше повідомлення, якщо наш клас не може.

Тепер ми повинні написати код для конкретного повідомлення. Для цього робимо наступний кроки.

Третій крок. У класі пишемо метод для обробки конкретного повідомлення. Для стандартних повідомлень імена методів стандартні. Утворюються вони так: пишемо новий префікс On, після якого пишемо потрібне повідомлення Windows без префікса WM_, причому в ньому великими літерами пишемо тільки перші літери в кожному слові. Наприклад, повідомлення WM_ONLBUTTONDOWN перетвориться на OnLButtonDown. Параметри і повернене значення беремо з підказок. Перед назвою методу не забудемо написати afx_msg. У нашому прикладі це


Поделиться:

Дата добавления: 2014-12-03; просмотров: 411; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты