- •1.1 Теоретичні відомості
- •1.1.1 Загальні відомості про Visual Studio 2005
- •1.1.2 Різні типи додатків Windows
- •1.2 Хід виконання роботи
- •1.2.1 Запуск Visual Studio і виклик майстра створення додатків
- •1.2.2 Створення консольного додатку
- •1.2.3 Створення простого діалогового додатку
- •1.2.4 Створення додатку з єдиним документом
- •1.2.5 Створення додатку з декількома документами
- •1.3 Завдання до лабораторної роботи
- •1.4 Контрольні питання
- •Завдання №2 обробка повідомлень
- •2.1 Теоретичні відомості
- •2.1.1 Загальні відомості про обробку повідомлень
- •2.1.2 Карти повідомлень
- •2.1.3 Макроси карт повідомлень
- •2.2 Хід виконання роботи
- •2.2.1 Створення пробного додатку
- •2.2.2 Додавання деталей проекту, створення повідомлень
- •2.3 Завдання до лабораторної роботи
- •2.4 Контрольні питання
- •Завдання №3 вивід на екран. Робота зі шрифтами
- •3.1 Теоретичні відомості
- •3.1.1 Загальні відомості про вивід на екран
- •3.1.2 Контекст пристрою
- •3.1.3 Шрифти
- •3.2 Хід виконання роботи
- •3.2.1 Заготівка додатку
- •3.2.2 Розробка функцій виводу тексту і графічних примітивів
- •3.3 Завдання до лабораторної роботи
- •3.4 Контрольні питання
- •Література
3.1.3 Шрифти
Шрифти Windows описуються в структурі LOGFONT. Структура містить в собі 14 полів:
lfHeight — висота шрифта, логічних одиниць;
lfWidth — ширина шрифта, логічних одиниць;
lfEscapement — угол нанесення тексту;
lfOrientation — наклон символів;
lfWeight — товщина ліній шрифта;
lfItalic — ненульове значення означє курсив;
lfUnderline — ненульове значення означає підкреслення;
lfStrikeOut — ненулевое значение означає перекреслений щрифт;
lfCharSet — номер таблиці кодування;
lfOutPrecision — параметр, що визначає відповідність шрифту, що тапрошується і того, що є в наявності;
lfClipPrecision — параметр, що визначає спосіб "обрізання" зображень літер при их виході за межі області обмеженого виводу;
lfQuality — якість вигляду шрифта;
lfPitchAndFamily — поле визначає, чи буде шрифт мати фіксовану або змінну ширину літер, а також сімейство, до якого належить шрифт;
lfFaceName — им’я шрифта.
При програмуванні під Windows прийнято при створенні нового шрифту і виборі його в контекст зберігати покажчик на старий. Як це робиться, буде показано в ході роботи.
3.2 Хід виконання роботи
3.2.1 Заготівка додатку
Перш за все необхідно розробити додаток для роботи з єдиним документом, назвемо його TestPaint. В процесі створення додатку за допомогою майстра створення додатків не міняємо ніяких опцій, окрім етапу вибору опцій зовнішнього вигляду документа, де скидаємо всі прапорці (рис. 3.1 та Рисунок 3.1)
Рисунок 3.1 – Етап вибору опцій зовнішнього вигляду документа у Microsoft Visual Studio 2005
Для з'ясування механізму виводу на екран дана програма повинна буде по натисненню лівою кнопкою миші на робочій області міняти вміст вікна виводу.
Спершу необхідно включити в клас уявлення новий член-змінну, який буде берегти інформацію про те, який вид картинки потрібно вивести на екран, і змінювати її у відповідь на кожне клацання мишею.
За допомогою оглядача файлів, який знаходиться в робочому вікні проекту справа вибираємо теку Header Files і в ній вибираємо і відкриваємо файл TestPaintView.h. Після коментарія //Attribute додаємо в тіло класу наступні строчки:
protected:
enum {Fonts, Pens} m_Display;
Переходимо в оглядач класів, розвертаємо вміст класу CTestPaintView і двічі клацаємо на конструкторі класу CTestPaintView(). Додаємо в тіло конструктора наступний рядок:
m_Display = Fonts;
Таким чином спочатку, при запуску програми, селектор картинок ініціалізується на відображення набору шрифтів.
Тепер переходимо до доповнення функції OnDraw(CDC* pDC), в якій буде використовуватися наш селектор картинок. Двічі клацаємо на ім'я цієї функції і вставляємо в неї текст, який буде відповідати за перемикання між зображеннями (лістинг 3.1).
void CTestPaintView::OnDraw(CDC* pDC)
{
CTestPaintDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
switch (m_Display)
{
case Fonts:
ShowFonts(pDC);
break;
case Pens:
ShowPens(pDC);
break;
}}
Лістинг 3.1 – Модіфікована функція зміни зображення
Зараз необхідно додати в клас CTestPaintView функції ShowFonts(pDC) і ShowPens(pDC). Кожна з цих функцій використовує той же покажчик контексту, який був переданий функції OnDraw(CDC* pDC). Включити ці функції в клас можна таким чином:
а) клацніть правою кнопкою миші на назві класу CTestPaintView і в меню вибрати пункт додавання функції-члена Add Member Function;
б) в полі Fuction Type введіть тип, що повертається функцією - значення void; Оголошення функції Function Declaration повинне мати вигляд ShowFonts(CDC* pDC); змініть характер доступу на захищений – виберіть перемикач Protected; клацніть на кнопку [OK];
3. повторіть вище перелічені дії, тільки замість ShowFonts(CDC* pDC) введіть в полі оголошення функції значення ShowPens(CDC* pDC).
Тепер необхідно відловити клацання лівої кнопки миші і написати текст обробки повідомлення, в якій повинна відбутися зміна змінної m_Display. Клацніть правою кнопкою миші на назві класу CTestPaintView і виберіть пункт додавання обробника повідомлень Add>New>Message Handler, тепер вибираємо і двічі клацаємо на обробнику WM_LBUTTONDOWN в списку обробників нових повідомлень і подій Windows New Windows Message and Event Handlers (рис. 3.3), клацаємо на кнопці [Edit Existing] і переходимо до редагування створеної функції обробки повідомлень.
В створену функцію обробки повідомлень необхідно вставити текст, представлений в лістингу 3.2. Задача даної функції привласнити нове значення змінної m_Display і викликати функцію Invalidate(). Виклик функції Invalidate() говорить ОС, що весь вміст вікна потрібно перемальовувати. Це примушує Windows сформувати повідомлення WM_PAINT, яке, у свою чергу, викликає функцію OnDraw(CDC* pDC), яка залежно від значення змінної m_Display викличе відповідну функцію промальовування зображення.
Рисунок 3.2 – Додавання функції обробки повідомлення
void CTestPaintView::OnLButtonDown(UINT nFlags, CPoint point)
{
if (m_Display == Fonts)
m_Display = Pens;
else
m_Display = Fonts;
Invalidate();
CView::OnLButtonDown(nFlags, point);
}
Лістинг 3.2 – Текст функції обробки повідомлення