Тема: елементи мови C++ для подійноорієнтованого програмування.
Мета:
По завершенню вивчення теми учень (учениця):
Тип уроку: комбінований.
Обладнання: комп’ютери зі встановленими ОС, середовищем програмування CodeBlocks та бібліотекою WxWidgets, (дана) інструкція.
Примітка. Перед виконанням роботи потрібно налаштувати комп'ютер — див. описи для ОС Windows 10 та Linux Mint 18.1 Serena (Mate).
Структура уроку
назва (ідентифікатор) — послідовність літер латиниці, цифр і нижнього підкреслювання «_», на початку — обов'язково літера;
тип — визначає обсяг відведеної пам'яті, можливі дії, правила тлумачення бітів пам'яті та множину допустимих значень;
розмірність — проста або складена (структурована);
значення — елемент множини допустимих значень величини.
кількісні — такі властивості можна подати числом у певних одиницях виміру (метрах, секундах, грамах);
якісні — такі властивості можна лише назвати. Наприклад, характер учня може бути спокійним або неврівноваженим.
Значення властивостей об'єкта у певний момент часу визначають його стан. Вони можуть змінюватися, але їхня сукупність залишається сталою. Якщо така сукупність зазнає змін, то ми маємо справу вже з іншим об'єктом.
Стан об'єкта — це сукупність значень його параметрів у певний момент часу.
Подія — зміна властивостей об'єкта, взаємодія між об'єктами, утворення нового об'єкта або знищення наявного об'єкта.
Працюючи з прикладними програмами, користувач виконує дії з певними об'єктами: вказівками меню, кнопками, прапорцями, текстовими полями тощо. Об'єкт — основна структура даних у сучасних програмах, які тому і називають об'єктно-орієнтованими.
Зокрема стан кнопки можна описати так: розмір 90×20 пікселів, колір — сірий, шрифт — Arial, стан — ненатиснута. Крім стану об'єкт має поведінку — сукупність дій, які він може виконувати. Зауважимо, що не лише об'єкт здатен виконувати дії, а й над ним можуть виконувати дії інші об'єкти. Так, користувач може клацнути кнопку або перемістити фрагмент тексту — це дії користувача над кнопкою та фрагментом тексту. Одні дії можуть спричиняти інші. Наприклад, натискання кнопки у середовищі Libre Office Writer призводить до того, що виділений фрагмент тексту копіюють до буферу обміну.
У програмуванні ті дії, які спричиняють інші, називають подіями. Програмні об'єкти виконують дії не самі по собі, не раптово, а лише у відповідь на настання тієї чи іншої події. У цьому і полягає основний принцип подійно-орієнтованого програмування. Переважна більшість програм, з якими ви працюєте, є не лише об'єктно-орієнтованими, а й подійно-орієнтованими. Це інша характерна риса сучасного програмного забезпечення.
Xарактерні риси сучасних прикладних програм — це виконання дій у результаті настання тих чи інших подій та зберігання даних у вигляді об'єктів. Це називають об'єктною та подійною орієнтованістю.
У програмному коді, що орієнтований на опрацювання подій, програміст повинен вказати як слід реагувати на різні події чи дії користувача. Створюювати об'єкти графічного інтерфейсу в середовищах програмування можна двома способами:
меню;
інструменти роботи з проектом;
інспектор об'єктів, що містить список вихідних файлів проекту, а також перелік складових об'єктів та їх властивостей;
вікно екранної форми проекту;
об'єкти — компоненти графічного інтерфейсу;
редактор програмного коду. Для його виклику потрібно двічі клацнути лівою клавішею миші на екранній формі. Для повернення до роботи з екранною формою у наочному режимі потрібно натиснути на вкладення з назвою проекту (на поданій нижче ілюстрації *tutorialframe.wxs);
вікно повідомлень.
Екранна форма — це вікно, що містить графічні елементи або об'єкти управління (меню, кнопки тощо). Кожний такий об'єкт може мати зв'язаний із ним функціональний програмний код, оформлений у вигляді процедури опрацювання події.
Розглянемо деякі з подій, умови їхньої настання і можливості використання.
Подія OnChanging для класу TCanvas (полотно для малювання) відбувається одразу після зміни зображення на полотні.
Подія OnChange для класу TCanvas настає після зміни зображення на полотні. При виклику будь-якого методу малювання здійснюється така послідовність операцій:
Подія полотна OnChange настає при зміні самого зображення, а не властивостей полотна. Такі властивості полотна, як об'єкти Font (шрифт), Brush (пензель) Реn (перо) мають свої власні події.
Подія OnClick для класу TControl настає, якщо користувач натиснув і відпустив основну клавішу миші, коли вказівник миші розташовано на об'єкті. Один обробник події OnClick можна використовувати для опрацювання подій з різними об'єктами. Якщо потрібно розрізняти, з яким об'єктом трапилася подія, щоб передбачити для різних об'єктів різний відгук, використовують параметр Sender:
ShowMessage("OnClick в "+((TControl *)Sender)->Name);
Подія OnCreate для класу TCustomForm настає у момент створення форми. Її використовують для виконання процедур налаштувань форми або розташованих на ній об'єктів. Якщо в обробнику цієї події створюються об'єкти, їх потрібно руйнуватися, щоб звільнити пам'ять, в обробнику події OnDestroy. Послідовність подій при створенні форми зі значенням true властивості Visible така: OnCreate, OnShow, OnActivate, OnPaint.
Подія OnDblClick для класу TControl настає при подвійному клацанні. До одного і того самого об'єкту можна написати обробники подій OnClick і OnDblClick, бо перший з них завжди перехопить перше клацання. Властивість Sender містить назву об'єкта, з яким трапилася подія. Її можна використати для диференційованого відгуку на події з різними об'єктами.
Подія OnDragDrop для класу TControl настає у момент відпускання об'єкту, який перетягують, над даним об'єктом. У обробнику події треба описати, що в цей момент має відбутися. Параметр Source містить назву об'єкту, який перетягуємо, а параметр Sender — об'єкту, над яким здійснено відпущенння. Параметри X, Y містять координати розташування вказівника миші над об'єктом у системі координат клієнтської області цього об'єкта.
Нехай на формі є кілька списків типу TListBox і дозволено переміщати рядки з одного списку в інший. Це можна зробити таким чином. У всіх списках надають властивості DragMode значення dmAutomatic. Це забезпечує автоматичний початок перетягування. Далі для одного зі списків пишуть обробник події OnDragOver.
void __fastcall TForm1::ListBox1DragOver(TObject *Sender,TObject *Source, int X, int Y, TDragStatS State, bool SAccept) { Accept = Source->ClassNameIs("TListBox"); }
Цей обробник вказує, що на даний компонент можна перетягувати об'єкти типу TListBox. У всіх інших списках на подію OnDragQver вказують цей самий обробник. Далі для одного зі списків пишуть обробник події OnDragDrop:
void __fastcall TForm1::ListBox1DragDrop(TObject *Sender,TObject *Source, int X, int Y) { TListBox *S = (TListBox *)Source; ((TListBox*)Sender)->Items-> Add(S->Items->Strings[S->ItemIndex]); S->Items->Delete(S->ItemIndex); }
Перші два оператора обробника додають до списку рядок, виділений у списку-джерелі. Якщо пишуть не універсальний оброблювач, а призначений для для даного об'єкта, то перший оператор можна видалити, а у другому ((TListBox *) Sender) і S потрібно замінити на назву компонента ListBox1. Третій оператор видаляє перенесений рядок з джерела. Якщо потрібно не перенесення, а лише копіювання рядків з одного списку в інший, то цей оператор не потрібен.
У всіх інших списках для події OnDragDrop вказують цей самий обробник. Після цього, заповнивши списки, можна запускати застосунок. Користувач зможе перетягувати рядки між будь-якими наявними списками.
Подія OnDragOver для класу TControl настає у момент, коли об'єкт, який переміщують, перетнув межу даного об'єкта і опинився всередині його контуру. Завершується подія, коли переміщуваний об'єкт, залишаючи даний об'єкт, перетнув його межу. Обробник події OnDragOver використовують для того, щоб дати сигнал про готовність прийняти переміщуваний об'єкт у разі, якщо користувач відпустить його над даними об'єктом. Якщо даний об'єкт готовий прийняти переміщуваний об'єкт, в обробнику потрібно задати значення true параметру Accept. Втім, це значення як усталено дорівнює true, тому його можна не змінювати. Взагалі у граничному випадку обробник може бути порожнім, що буде означати готовність прийняти будь-який об'єкт. Але навіть порожній обробник потрібен, бо інакше повідомлення про прийом об'єкта застосунок не отримає. Під час перетягування форма вказівника миші може змінюватися, сигналізуючи користувачеві про готовність прийняти об'єкт. Для цього потрібно до моменту події OnDragOver задати відповідне значення властивості об'єкта DragCursor. Параметр Source визначає переміщуваний об'єкт, параметр Sender — об'єкт, на який можна перемістити, параметри X, Y — координати точки екрана в пікселах. Параметр State типу TDragState визначає стан об'єкта, що переміщуємо, по відношенню до інших об'єктів. Можливі наступні значення параметра State:
У поданому нижче прикладі обробник події OnDragOver сигналізує про те, що компонент готовий прийняти переміщуваний об'єкт, якщо це компонент ListBox1.
void __fastcall TForm1::ListBox1DragOver (TObject *Sender,TObject *Source, int X, int Y, TDragState State, bool SAccept) { Accept = (((TControl*)Sender)->Name == "ListBox1"); }
Подія OnEndDrag для класу TControl настає при будь-якому завершенні процесу переміщення: вдалому (об'єкт переміщено у приймач) або невдалому (об'єкт відпущено над формою або іншим об'єктом, які не можуть його прийняти). Подія стосується переміщуваного об'єкта. Опрацювання цієї події не є необхідним для здійснення самого процесу переміщення. Обробник необхідно створити лише за потреби дії або повідомлення — підтвердження результату перетягування.
Параметр Sender — це об'єкт переміщення. Параметр Target — це приймач, якщо об'єкт був ним прийнятий, або NULL, якщо переміщення закінчилося невдачею. Параметри X, Y — координати екрану в пікселях. Подамо приклад відображення повідомлення про результати перетягування: «Перенесення об'єкта ListBox1 перервано» або «ListBox1 перенесено в ListBox2». Аналогічним чином можна запрограмувати будь-які дії.
void __fastcall TForm1::ListBox1EndDrag (TObject *Sender,TObject *Target, int X, int Y) { if (Target == NULL) ShowMessage("Перенесенння об'єкту " + ((TControl*)Sender)->Name + " перервано"); else ShowMessage(((TControl*)Sender)->Name + " перенесено в " + ( (TControl*)Target)->Name); }
Подія OnEnter для класу TWinControl настає у момент отримання елементом фокусу (виділення). Ця подія не настає при перемиканні між формами або між додатками. Під час перемикань між елементами, розташованими в різних контейнерах, наприклад, на різних панелях, подія OnEnter спочатку настає для контейнера, а потім для елемента, розташованому в ньому. Нехай форма має кнопку ОК і групову панель, що включає три радіокнопки. Нехай у початковий момент активна кнопка ОК. Коли користувач клацне на одній з радіокнопок, для кнопки ОК настане подія OnExit, потім настане подія OnEnter групової панелі, і лише потім настане подія OnEnter тієї кнопки, по якій клацнули. Якщо після цього користувач клацне на кнопку ОК, то спочатку настане подія OnExit радіокнопки, потім подія OnExit групової панелі, а потім подія OnEnter кнопки ОК.
Подія OnExit для класу TWinControl настає у момент втрати елементом фокусу, тобто у момент перемикання з нього на інший елемент. Ця подія не настає при перемиканні між формами або між застосунками. Значення властивості ActiveControl змінюється перш, ніж відбувається подія OnExit. Під час перемикань між елементами, розташованими в різних контейнерах, наприклад, на різних панелях, подія OnExit спочатку настає для елемента, а потім для контейнера, що його містить.
Подія OnKeyDown для класу TWinControl настає, якщо об'єкт перебуває у фокусі, при натисканні користувачем будь-якої клавіші, включаючи функціональні й допоміжні (Shift, Alt, Ctrl). В обробник події передають, крім звичайного параметра Sender, що вказує на об'єкт, в якому відбулася подія, також параметри Key, Shift. Параметр Key визначає натиснуту клавішу клавіатури. Для не алфавітно-цифрових клавіш використано віртуальний код API Windows. Коди не розрізняють символи у верхньому і нижньому регістрах і не розрізняють літер кирилиці й латиниці. Параметр Shift є множиною, яка може бути порожньою або містити такі елементи:
Наприклад, для розпізнавання комбінації клавіш Alt + X використовують такий оператор:
if((Key == 'X') && Shift.Contains(ssAlt)) …
А відгук на натиснення клавіші Enter можна оформити одним з таких трьох операторів:
Подія OnKeyPress для класу TWinControl настає, якщо об'єкт перебуває у фокусі, при натисканні користувачем клавіші символу. Параметр Key в обробнику цієї події має тип Char і відповідає символу натиснутої клавіші. При цьому розрізняють символи у верхньому і нижньому регістрах, символи кирилиці й латиниці. Клавіші, що не відображаються в кодах ASCII (функціональні клавіші і такі як Shift, Alt, Ctrl), не викликають цієї події. Тому натискання таких комбінацій клавіш, як, наприклад, Shift + A, породжує лише одну подію OnKeyPress, при якому параметр Key дорівнює «А». Для того щоб розпізнавати клавіші, які не відповідають символам, або комбінаціям клавіш, треба використовувати обробники подій OnKeyDown і OnKeyUp. Зауважимо: подія OnKeyPress наступає, якщо натиснуто лише клавішу символу або клавіша символу і клавішу Shift. Якщо ж клавіша символу натиснуто одночасно з якоюсь з допоміжних клавіш, то подія OnKeyPress може не настати: відбудуться тільки події OnKevDown при натисканні й OnKeyUp при відпусканні. Або, якщо і настане, то вкаже на хибний символ.
Параметр Key передають в обробник за посиланням. Його можна змінити, передаючи для подальшої стандартної обробки інший символ.
Оператор обробника події OnKeyPress переводить латинські символи у верхній регістр, незалежно від того, в якому регістрі набрав їх користувач. Цей оператор діє тільки на літери латиниці:
Key = UpCase (Key);
Аналогічний оператор діє на літери латиниці та літери кирилиці:
Key = AnsiOpperCase(Key)[1];
Подія OnKeyUp для класу TWinControl настає, якщо компонент перебуває у фокусі, при відпусканні користувачем будь-якої раніше натиснутої клавіші, включаючи функціональні й допоміжні, такі як Shift, Alt, Ctrl. В обробник події передають, крім параметра Sender, що вказує на об'єкт, у якому відбулася подія, також параметри Key і Shift. Параметр Key визначає клавішу клавіатури, яку щойно відпустили. Для не алфавітно-цифрових клавіш використовуються віртуальні коди API Windows. Коди не розрізняють символи в верхньому й нижньому регістрах, не розрізняють символи кирилиці й латиниці.
Параметр Shift є множиною, яка може бути порожньою або містити такі елементи:
Значення елементів Shift, при відповідних натисканнях кнопок миші, в даній події не використовують. Подія OnKeyUp найзручніша для розпізнавання натиснутих клавіш, особливо, їхніх комбінацій. Потрібно лише не забувати, що параметр Key має тип word, а не char, тому для розпізнавання потрібно використовувати віртуальні коди. До того ж, треба враховувати, що віртуальний код не розрізняє символи в верхньому і нижньому регістрі й не реагує на те, яку розкладку в даний момент увімкнено.
Нехай потрібно написати обробник, який би реагував на натискання клавіш Shift + Y. Перевірити натиснуті клавіші можна оператором, але він буде реагувати і на «У», і на «у», і навіть на літери кирилиці «Н» і «н». У цій ситуації потрібно використовувати подію OnKeyPress:
if((Key == 'Y') && Shift.Contains(ssShift))
Події OnMouseDown та OnMouseUp для класу TControl настають відповідно при натисканні і відпусканні користувачем будь-якої кнопки миші. Обробник події OnMouseDown можна використовувати для початку процесу перетягування компонента, якщо потрібно встановити додаткову умову. Наприклад, перевірити умови, за яких можна починати перетягування. У цьому випадку для об'єкта задають значення dmManual властивості DragMode, що забезпечує керування початком перетягування. Обробник події OnMouseDown може мати такий вигляд:
void __fastcall TForm1 :: ListBox1MouseDown (TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if ((Button == mbLeft) && <перевірка якоїсь умови>) ((TControl *) Sender) -> BeginDrag (false, 5); }
Подія OnMouseEnter для класу TCustomLabel настає, коли вказівник миші входить в область мітки. Обробник події OnMouseEnter створюють, якщо потрібно зробити якісь операції при переміщенні вказівника миші над позначкою. Використавши цю подію, можна змінити колір тла або тексту мітки, а потім повернути його до попереднього кольору, коли вказівник покине область мітки і настане подія OnMouseLeave. Для цього в обробник події OnMouseEnter усіх міток застосунку можна вставити оператор:
((TLabel *)Sender)->Font->Color = clBlue;
А в обробник події OnMouseLeave такий оператор:
((TLabel *)Sender)->Font->Color = clBlack;
При переміщенні вказівника миші над будь-якою міткою її текст буде перефарбовано у блакитний колір.
Подія OnMouseLeave для класу TCustomLabel настає, коли вказівник миші залишає елемент керування. Її використовують для скасування операції, раніше запроваджених в обробнику події OnMouseEnter для змін у мітці часу переміщення над нею вказівника миші.
Подія OnMouseMove для класу TControl настає при переміщенні вказівника миші по елементу керування. Її використовують, якщо потрібно зробити певні операції при переміщенні вказівника миші над компонентом. Параметр Shift, що є множиною, містить елементи, що дозволяють визначити, які кнопки миші і які допоміжні клавіші (Shift, Ctrl, Alt) натиснуто у поточний момент. Параметри X, Y містять координати вказівника миші у клієнтській області об'єкта. Параметр Sender (джерело події) — сам об'єкт. Подія OnMouseMove виникає незалежно від того, натиснуто якісь кнопки або клавіші чи ні. Наприклад, для виконання певної дії при натиснутій кнопці Alt під час переміщення курсора миші над об'єктом, використовують такий умовний оператор:
if(Shift.Contains(ssAlt)) …
Подія OnPaint для класів TCustomForm, TPaintBox настає, коли приходить повідомлення ОС про необхідність перемалювати зіпсоване зображення. Зображення може зіпсуватися через тимчасове перекриття даного вікна іншим вікном або роботи стороннього застосунку. Оброблювач цієї події повинен перемалювати зображення. При перемальовуванні зображення полотна Canvas можна використовувати властивість ClipRect, яке вказує область полотна, всередині якої зображення зіпсовано.
Якщо копію зображення, яке з'являється на полотні, розташовано в об'єкті BitMap, то обробник події OnPaint для форми може мати такий вигляд:
Canvas->Draw(0,0,BitMap);
Для об'єкта PaintBox:
PaintBox1->Canvas->Draw(0,0,BitMap);
Швидше перемальовування здійснюють при використанні властивості ClipRect полотна:
Canvas->CopyRect(Canvas->ClipRect, Bitmap->Canvas, Canvas->ClipRect);
Подія OnProgress для класів TGraphic, TImage, TPicture настає під час повільних процесів змін графічного зображення: завантаження, збереження, трансформація. Ці події дозволяють побудувати в застосунку індикатор ходу процесу, що забезпечує зворотний зв'язок з користувачем. Розробники нових складових можуть породжувати події OnProgress, викликаючи захищений метод Progress. Параметр Stage вказує стадію процесу початок, продовження, закінчення. Він може відповідно набувати значень psStarting, psRunning, psEnding. Якщо застосунок передбачає індикацію процесу, то можна створювати індикатор при Stage = psStarting, змінювати його значення, поки Stage = psRunning і закривати при Stage = psEnding. Параметр PercentDone показує, яка приблизно частина процесу виконана. Цей параметр може використовуватися в індикаторі процесу. Параметр RedrawNow вказує, чи може зображення в даний момент бути успішно відображено на екрані. Параметр R вказує область зображення, яка змінена і потребує перемальовуванні. Параметр Msg містить коротку довідку про перебіг процесу, наприклад, Loading, Storing, Reducing colors. Рядок Msg може бути й порожнім.
Подія OnStartDrag для класу TControl настає, коли користувач натиснув ліву кнопку миші над об'єктом і, не відпускаючи її, почав зміщати курсор миші, тобто почав перетягування. Обробник події OnStartDrag дозволяє описати якісь спеціальні дії, необхідні на початку перетягування. Параметр Sender містить назву перетягуваного об'єкту. Змінна DragObject як усталено дорівнює NULL. Це означає, що переносити будуть сам компонент або його об'єкт.
4. Інструктаж з ТБ
5. Формування умінь і навичок
Завдання. Створити проект, в якому користувач, після натиснення на кнопку з надписом Click here (Натисніть тут), побачить на екрані надпис з привітанням Hello C++! (Привіт С++!).
Створити теку Ваше прізвище у вказаній вчителем теці.
У середовищі CodeBlocks скористатися вказівкою меню New / Рroject… (Новий / Проект…).
У вікні діалогу обрати вказівку WxWidgets project і натиснути Go (Далі).
У вікні привітання натиснути Next (Далі). Цей крок в подальшому можна пропустити, якщо виставити мітку Skip this page next time (Пропустити цю сторінку наступного разу).
У наступному вікні діалогу обрати версію бібліотеки (для поданого прикладу 3.0.x) і натиснути кнопку Next (Далі).
У вікні діалогу wxWidgets project вказати назву проекту (tutorial для поданого прикладу) у полі Project title (Назва проекту) та теку, в якій буде збережено проект, у полі Folder to create project in (Тека, у якій створити проект). Решту полів буде заповнено автоматично. Натиснути кнопку Next (Далі).
За бажанням вказати дані про автора проекту:
і натиснути кнопку Next (Далі).
Обрати графічний користувацький інтерфейс GUI Builder — інструмент для побудови програмного забезпечення (для поданого прикладу — wxSmith, Frame Based) і натиснути кнопку Next (Далі).
Вказати розташування теки (найвищого рівня), де було розпаковано wxWidgets (для поданого прикладу D:\WxWidgets) і натиснути кнопку Next (Далі).
Вказати GNU GCC Compiler — компілятор, який буде використано, і натиснути кнопку Next (Далі).
Вказати параметри конфігурації wxWidgets. Для поданого прикладу як на малюнку.
При появі вікна попередження про неможливість знайти конфігурацію відладчика у вказаній теці WxWidgets, обирати варіант Так. Згодом можна буде уточнити шлях до теки з відладчиком.
Вказати розширені параметри компілятора (для доданого прикладу як на малюнку) і настинути кнопку Finish (Готово)
Переконатися у правильності налаштувань компілятора, використавши вказівку меню Settings / Compiler… (Налаштування / Компілятор).
У вікні налаштувань компілятора в розділі Global compiler settings (Глобальні параметри компілятора) переконатися, що обрано компілятор GNU GCC Compiler та на вкладенні Compiler Flags (Прапорці компілятора) прапорець виставлено лише для такого:
Have g++ follow the C++ 11 ISO C++ language standard [-std=c++11].
Перейти на вкладення Toolchain executables (Виконувані файли) і натиснути кнопку Auto-detect (Автовизначення) для уточнення шлях до теки з відладчиком. Натиснути ОK для завершення налаштувань.
В інспекторі об'єктів перейти на вкладення Resources (Джерела). Виділити об'єкт wxFrame (Конструкція) та змініть розміри конструкції екранної форми, прибравши прапорець навпроти властивості Default size (Розміри як усталено),
надайти нові значення властивостям:
Width (Ширина) = 400,
Height (Висота)= 200.
На панелі об'єктів — компонентів графічного інтерфейсу перейти на вкладення Layot (Макет), обрати інструмент wxBoxSizer. Цей компонент використовують як контейнер для інших компонентів. Розташувати його на екранній формі, клацнувши на ній клік лівою клавішею миші.
На панелі компонентів Standart (Стандартна) обрати інструмент wxButton (Кнопка). Розташувати її на екранній формі всередині контейнера wxBoxSizer.
Змінити значення властивостей об'єкта wxButton (Кнопка):
Label (Надпис) — Click here! (для того щоб текст було подано двома рядками, потрібно викликати редактор тексту, натиснувши на кнопку праворуч від значення Label);
Font (Шрифт) — для початку форматування тексту натиснути на кнопку праворуч від значення Click to edit (Натисніть для редагування), з'явиться вікно Font settings (Налаштування шрифту) в ньому натиснути кнопку Change (Змінити).
Створити програмний код для опрацювання події OnButtonClick — натискання лівої кнопки миші. Для цього в інспекторі об'єктів перейти на вкладення {} Event (Події). В полі EVT_Button випадного списку обрати значення Add new handler (Додати новий обробник). У вікні, що з'явиться, вказати значення події OnButtonClick та натиснути кнопку ОK.
У вікні редактора коду внести код опрацювання події:
void tutorialFrame::OnButton1Click(wxCommandEvent& event) { wxString msg = _T("Hello C++!"); wxString info = _T("greeting"); wxMessageBox (msg, info, wxOK|wxICON_INFORMATION, this); }
Проаналізувати цей код.
Запустити проект на виконання, натиснувши на панелі інструментів кнопку Build and run (Побудувати та виконати). Перевірити правильність роботи програми. За потреби виправити помилки.
Зберегти проект і завершити роботу з проектом і середовищем.
6. Підбиття підсумків уроку
Що таке подійно-орієнтоване програмування?
Які події об'єктно-орієнтованого програмування Ви знаєте?
Опишіть умови настання і можливе використання обробників таких подій: OnChanging, OnChange, OnClick, OnCreate, OnDblClick, OnDragDrop, OnDragOver, OnEndDrag, OnEnter, OnExit, OnKeyDown, OnKeyPress, OnKeyUp, OnMouseDown, OnMouseUp, OnMouseEnter, OnMouseLeave, OnMouseMove, OnPaint, OnProgress, OnStartDrag.
Чи виникали труднощі на уроці? У чому?
Виставлення оцінок.
7. Домашнє завдання
Вивчити навчальний матеріал уроку.
Налаштувати на домашньому ПК CodeBlocks + wxWidjets.
За зразком програми, створеної у класі, скласти й виконати програми виведення на екран Вашого імені при наведенні миші на встановлену Вами кнопку.
Текст упорядкувала Холодова Олена Станіславівна, вчитель спеціалізованої школи І–ІІІ ступенів № 120 з поглибленим вивченням предметів природничо-математичного циклу Дніпровського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 24.10.2016 по 28.10.2016.