- •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.2.2 Розробка функцій виводу тексту і графічних примітивів
Тепер необхідно написати власне функції формування даних для виводу на екран. Почнемо з функції ShowFonts(CDC* pDC).
void CTestPaintView::ShowFonts(CDC *pDC)
{
LOGFONT myfont;
myfont.lfHeight = 8;
myfont.lfWidth = 0;
myfont.lfEscapement = 0;
myfont.lfOrientation = 0;
myfont.lfWeight = FW_NORMAL;
myfont.lfItalic = 0;
myfont.lfUnderline = 0;
myfont.lfStrikeOut = 0;
myfont.lfCharSet = ANSI_CHARSET;
myfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
myfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
myfont.lfQuality = PROOF_QUALITY;
myfont.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN;
strcpy(myfont.lfFaceName, "Times New Roman");
UINT pos = 0;
UINT i;
for (i=0; i<8; i++)
{
myfont.lfHeight = 8 + (i*8);
if (i==5) myfont.lfItalic = 1;
if (i==6) myfont.lfUnderline = 1;
if (i==7) myfont.lfStrikeOut = 1;
CFont font;
font.CreateFontIndirect(&myfont);
CFont* oldfont = pDC->SelectObject(&font);
pos += myfont.lfHeight;
pDC->TextOut(20, pos, "sample font...");
pDC->SelectObject(oldfont);
}
}
Лістинг 3.3 – Текст функції виводу шрифтів
Функція починає з того, що встановлює шрифт Times New Roman заввишки 8 пікселів шириною, яка найкращим чином відповідає висоті (лістинг 3.2). Потім в циклі послідовно збільшує висоту шрифту, що виводиться, і, починаючи з п'ятого рядка додає шрифту додаткові атрибути: курсив, підкреслення, перекреслювання (рис 3.3). Після установки атрибутів функція створює новий шрифт – екземпляр класу CFont і настроює шрифт відповідно до заданих параметрів. Потім створюється покажчик на поточний шрифт, який після виводу на екран чергового рядка встановлюється як поточний контекст.
Тепер відкомпілюйте і відтранслюйте додаток. Після запуску виконуваного файла ви побачите декілька рядків тексту, що поступово збільшуються за розміром. Клацніть на вікні лівою кнопкою миші і фон стане чистим – це тому, що функція ShowPens(CDC* pDC) ще нічого не робить. Клацнувши ще раз, отримаємо знову зображення тексту.
Рисунок 3.3 – Результати роботи програми: функція виводу тексту
Тепер перейдемо до функції ShowPens(CDC* pDC). Створення цієї функції набагато простіше попередньої, оскільки тут вимагається задати тільки стиль зображення лінії, її товщину і колір.
void CTestPaintView::ShowPens(CDC *pDC)
{
srand(time(NULL));
UINT pos = 10;
UINT i;
for (i=0; i<16; ++i){
CPen pen(PS_SOLID, i*2+1, RGB(rand()%256,rand()%256,rand()%256));
CPen* oldpen = pDC->SelectObject(&pen);
pos += i*2+10;
pDC->MoveTo(20,pos);
pDC->LineTo(400,pos);
pDC->SelectObject(oldpen);
}
}
Лістинг 3.4 – Текст функції виводу ліній
Функція в тілі циклу спочатку формує нове перо – екземпляр класу CPen. Конструктору необхідно передати три параметри: стиль лінії, товщина лінії, яка збільшується в кожному подальшому циклі, і колір лінії (генерується випадковим чином). Макрос RGB приймає три значення для червоної, зеленої і синьої складових і перетворить їх в код кольору. Як і у випадку з шрифтами в циклі створюється покажчик на поточне перо, яке потім відновлюється в контексті. Після запуску програми функція виведе у вікні 16 ліній товщини, що поступово збільшується, і довільного кольору (рис. 3.4).
Спробуйте самостійно міняти різні параметри шрифтів і ліній і виводити їх на екран.
Рисунок 3.4 – Результати роботи програми: функція виводу ліній