- •1А. Побудова проекту додатка без майстра.
- •1Б. Побудова windows-додаткa за допомогою майстра
- •2. Розробка windows-додатку з діалоговим вікном
- •3.Програмування простих арифметичних виразів
- •Завдання до лабораторної роботи:
- •4.Створення файлів даних
- •Void cMyAppView::OnDraw(cdc* pDc)
- •Використання постійних наборів даних. Серіалізація
- •Void cLab6View::OnChar(uint nChar, uint nRepCnt, uint nFlags)
- •6.Робота з клавіатурою та мишою.
- •Void cLab6View::OnChar(uint nChar, uint nRepCnt, uint nFlags)
- •Void cLab6View::OnDraw(cdc* pDc)
- •Void cCenteredView::OnDraw(cdc* pDc)
- •Void cLab6View::OnDraw(cdc* pDc)
- •Void cLab6View::OnDraw(cdc* pDc)
- •If(!CaretCreated)
- •Void cLab6View::OnKillFocus(cWnd* pNewWnd)
- •Void cLab6View::OnSetFocus(cWnd* pOldWnd)
- •7.Обробка текстових даних.
- •Void cTextView::OnDraw(cdc* pDc)
- •8.Обробка одномірних масивів.
- •Void cMasView::OnDraw(cdc* pDc)
- •Void cMasView::OnDraw(cdc* pDc)
- •Void cMasView::OnDraw(cdc* pDc)
- •Void cMasView::OnDraw(cdc* pDc)
- •9. Обробка двомірних масивів.
- •Void cMasView::OnDraw(cdc* pDc)
- •Void cMasView::OnDraw(cdc* pDc)
- •10. Функції. Перевантаження та шаблони функцій.
- •Додаток1.Пояснення архітектури документ/облік
- •Додаток2.Аналіз коду, створеного майстром у lab4
- •MainFrm.H и MainFrm.Cpp
- •Lab4View.H та lab4View.Cpp
- •Список літератури
6.Робота з клавіатурою та мишою.
У даній лабораторній роботі розглядаються можливості введення інформації з клавіатури та за допомогою миші.
При цьому найважливішим є те, щоб навчитися обробляти повідомлення Windows - у даному випадку від клавіатури та миші, оскільки всі програми керуються подіями (тобто реагують на клацання мишою, нажатискання клавіш, вибір команд меню та ін.). За допомогою ClassWizard отримані повідомлення Windows співставляються методу, який називається обробником повідомлення. У даному випадку для повідомлення Windows WM_CHAR застосовуватиметься обробник з іменем OnChar(). Це означає, що при натисканні клавіші користувачем програма викликатиме метод OnChar().
Окрім цього, розглянемо відображення та форматування тексту у вікні, а також вирівнювання введеного користувачем тексту по центру вікна. Це означає, що текст розташовується точно всередині клієнтської області, як по вертикалі, так і по горизонталі. При цьому потрібно визначати розміри клієнтської області вікна та рядка, який виводиться, щоб забезпечити правильне розташування тексту.
Робота з клавіатурою
Читання символів з клавіатури та відображення їх у клієнтській області вікна (тобто вигляду View) при отриманні символів від користувача.
Побудувати каркас однодокументного проекту Lab6 за допомогою MFC AppWizard, подібно до того, який будувався у лабораторній роботі №1.
Робота програми містить два етапи - спочатку готується місце (буфер) для зберігання отриманих символів, а потім символи читаються з клавіатури.
Підготовка буферу длязберігання даних – додати змінну StringData типу CString до файлу Lab6Doc.h.(клацнути правою на файлі Lab6Doc та вибрати Add Member Variable) та задати у конструкторі Lab6Doc порожній рядок у файлі Lab6Doc.срр.
CLab6Doc::CLab6Doc() //конструктор
{
// TODO:
StringData = “”; // додати порожній рядок
}
Буфер для зберігання даних готовий. Далі потрібно записувати кожен символ, який вводить користувач, у змінну StringData, тобто читати у створений буфер.
Читання коду натиснених клавіш
При кожному натисненні деякої клавіші Windows надсилає повідомлення WM_CHAR, яке поєднується з методом OnChar() об’єкту вигляду.
Натиснувши Ctrl+W, завантажити майстер ClassWizard, відкрити вкладинку Message Maps - на ній майстер поєднує повідомлення Windows з програмою та використовує для цього так звану схему повідомлень (message map).
Вибрати клас СLab6View, WM_CHAR у вікні Messages, та натиснути Add Function, погодитись з запропонованим іменем функції (методу)OnChar() та натиснути Edit Code для того, щоб потрапити у дану функцію у файлі Lab6View.срр. Вона має такий вигляд:
Void cLab6View::OnChar(uint nChar, uint nRepCnt, uint nFlags)
{ // TODO:
CView::OnChar(nChar, nRepCnt, nFlags);
}
Створений метод викликатиметься при введенні символа з клавіатури. Значення символа передається у параметрі nChar. Якщо користувач не відпускає клавішу, що призводить до автоматичного генерування натиснень, тоді кількість натиснень даної клавіші буде передана у параметрі nRepCnt. Окремі біти параметра nFlags мають такі значення:
Біт стану переходу дорівнює 1, якщо клавіша відпускалась, та 0, якщо -натискалась. Біт попереднього стану дорівнює 1, коли клавіша натискалась, та 0, коли вона відпускалась. Код контексту дорівнює 1, коли натиснена клавіша ALT. Коли користувач не відпускає клавішу і клавіатура передає натиснення, що повторюються, тоді параметр попереднього стану в OnChar() дорівнюватиме 1.
Збереження символа у документі. Введений символ знаходиться у параметрі nChar, і його потрібно зберегти у рядковому об’єкті StringData. Цей об’єкт належить документу, тому спочатку потрібно отримати вказівник на об’єкт документу pDoc, потім дописати код додавання символів до рядка (CLab6Doc* pDoc = GetDocument();).
Відображення тексту. Виведення даних відбуватиметься у методі OnDraw(), тому що коли вікно буде перерисовуватися чи виникати з-під іншого вікна, тоді для перерисування та відновлення зображення програма викликатиме OnDraw(), а не OnChar().
Для виклику OnDraw() та перерисовування поновленого рядка викликається метод Invalidate() об’єкту вигляду. Таким чином, функція OnChar матиме такий вигляд:
