- •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
- •Список літератури
Void cLab6View::OnSetFocus(cWnd* pOldWnd)
{
CView::OnSetFocus(pOldWnd);
ShowCaret();
// TODO:
}
Компілюйте та завантажуйте програму. Теперь при отриманні фокуса курсор виникає, а при втраті - зникає.
Розглянемо можливість виводити текст у тому місці клієнтської області, яке користувач вибере клацанням миші.
Робота з мишою
Якщо користувач клацнув мишою у деякій точці клієнтської області, це означає його бажання, щоб текст виводився у вказаному місці.
Скориставшись ClassWizard, додати метод у клас Lab6View для обробки повідомлення Windows WM_LBUTTONDOWN; якому пропонується надати ім’я OnLButtonDown(). Клацнувши Edit Code перейти у дану функцію.
Окрім методу OnLButtonDown() можна скористатисяс й іншими методами для роботи з мишою - OnLButtonUp(), який відповідає за обробку відпускання лівої кнопки миші, OnRButtonDown(), який відповідає натисненню правої кнопки миші, OnLButtonDblClick(), який обробляє подвійне клацання лівою кнопкою, та ін. Методи для роботи з мишою наведені у таблиці нижче.
Методи ClassWizard для роботи з мишою
Метод |
Призначення |
OnLButtonDblClick |
Викликається при подвійному клацанні лівою кнопкою миші |
OnLButtonDown |
Викликається при натисненні лівої кнопкои миші |
OnLButtonUp |
Викликається при відпусканні лівої кнопки миші |
OnMButtonDblClick |
Викликається при подвійному клацанні середньою кнопкою миші |
OnMButtonDown |
Викликається при натисненні середньої кнопки миші |
OnMButtonUp |
Викликається при відпусканні середньої кнопки миші |
OnMouseActivate |
Викликається при натисненні кнопки миші при розташуванні вказівника миші над неактивним вікном |
OnMouseMove |
Викликається при пересуванні вказівника миші |
OnMouseWheel |
Викликається при повороті колеса миші. Застосовується у WindowsNT4.0 |
OnRButtonDblClick |
Викликається при подвійному клацанні правою кнопкою миші |
OnRButtonDown |
Викликається при натисканні правої кнопки миші |
OnRButtonUp |
Викликається при відпусканні правої кнопки миші |
OnRegisteredMouseWheel |
Викликається при повороті колеса миші. Застосовується у Windows95 та WindowsNT3.51 |
OnSetCursor |
Викликається при пересуванні вказівника миші у вікні, якщо миша не була раніше захоплена додатком |
Методу OnLButtonDown() передаються два параметри: nFlags та point. Перший містить інформацію про стан різних службових клавіш і може набувати наступних значень:
MK_CONTROL |
Натиснена клавіша CTRL |
MK_LBUTTON |
Натиснена ліва кнопка миші |
MK_MBUTTON |
Натиснена середня кнопка миші |
MK_RBUTTON |
Натиснена права кнопка миші |
MK_SHIFT |
Натиснена клавіша SHIFT |
Параметр point, об’єкт класу CPoint, містить поточні координати вказівника миші.
Коли кнопка миші натиснена, потрібно зберігати положення вказівника. Для цього потрібно додати змінні x та y до класу CLab6View, як це робилося для StringData.
У функції OnLButtonDown файлу Lab6View.срр надамо значення змінним х та у, отримані зі змінних x та y об’єкту point: x = point.x; y = point.y;
Клацання мишою означає, що текст буде виводитись у новому положенні - для очищення рядкового об’єкту скористатися методом Empty() класу CString:
pDoc->StringData.Empty();
Тепер потрібно оголосити поточний вміст вигляду недійсним, щоб перерисувати його та відобразити курсор у новому місці (відповідний код вже існує у методі OnDraw()). В результаті названих дій функція OnLButtonDown повинна мати такий вигляд:
void CLab6View::OnLButtonDown(UINT nFlags, CPoint point)
{
x = point.x;
y = point.y;
CLab6Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->StringData.Empty();
Invalidate();
CView::OnLButtonDown(nFlags, point);
}
Координати вказівника миші збережені. Тепер потрібно вивести текст у місці, вибраному користувачем.
Для виведення тексту з заданої точки скористаємось готовим методом OnDraw().
void CLab6View::OnDraw(CDC* pDC)
{CLab6Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(!CaretCreated)
{ TEXTMETRIC textmetric;
pDC->GetTextMetrics(&textmetric);
CreateSolidCaret(textmetric.tmAveCharWidth/8,textmetric.tmHeight);
CaretPosition.x = 0;CaretPosition.y = 0;
SetCaretPos(CaretPosition);
ShowCaret();
CaretCreated = true;
}
pDC->TextOut(x, y, pDoc->StringData);
CSize size = pDC->GetTextExtent(pDoc->StringData);
HideCaret();
CaretPosition.x = x+size.cx;
CaretPosition.y=y;
SetCaretPos(CaretPosition);
ShowCaret();
}
Завдання до лабораторної роботи.
Виконати пункти 1.. 26 та пояснити алгоритм роботи програми – 15 балів
