Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

ОСНОВЫ ПСИХОЛОГИИ


Помощь в написании учебных работ
1500+ квалифицированных специалистов готовы вам помочь

Шрифти

Контекст пристрою

В більшості випадків Windows управляє пристроями за допомогою спеціальних програм – драйверів. Драйвери приймають інформацію від додатку і передають відповідно цій інформації дані конкретному пристрою – монітору, принтеру, іншому пристрою виводу.

Оскільки пристрої виводу інформації навіть одного класу (наприклад, монітори) сильно відрізняються по характеристиках відображення, на плечі драйвера лягає постобробка інформації – пристосування відображення до можливостей пристрою, що використовується. Драйвер зв'язується з додатком за допомогою спеціальної структури даних, званої контекстом пристрою.

Контекст пристрою – це не більше ніж структура C++, яка містить атрибути робочого поля вікна. Ці атрибути включають вибране для поточної операції перо, кисть і шрифт.

Робоча область вікна – частина поверхні екрану, в якій можна відображати все, що порахує потрібним додаток: текст, таблиці даних, картинку і т.д. Певну допомогу в цьому надає бібліотека MFC, яка інкапсулює функції графічного інтерфейсу Windows в свої класи контексту пристроїв.

Шрифти 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 – Текст функції обробки повідомлення

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 – Результати роботи програми: функція виводу ліній

3.3 Завдання до лабораторної роботи

3.3.1 Створити додаток згідно з вказівками.

3.3.2 Змінити текст, що виводиться, на текст, написаний українською мовою.

3.3.3 Змінити функцію виводу ліній таким чином, щоб усі лінії були однакової товщини.

3.4 Контрольні питання

3.4.1 Чим відрізняються растровий та векторний типи шрифтів?

3.4.2 Якою процедурою можна встановити потрібний шрифт?

3.4.3 Поняття контексту пристрою.

3.4.4 Види контекстів.

3.4.5 Функції для роботи з різними видами контексту.

3.4.6 Структура LOGFONT та її компоненти.

3.4.7 Поясніть застосування інструментів Pen та Brush.


ЛІТЕРАТУРА

1. А. Макки Введение в .NET 4.0 и Visual Studio 2010 для профессионалов. – М.: ООО «И.Д. Вильямс», 2010. – 416 с.

2. Алексей Федоров Microsoft Visual Studio 2010. Первое знакомство. Электронное издание, 2009.- 40 с.

3. Пауэрс Л. Microsoft Visual Studio 2008 / Л. Пауэрс, М. Снелл – СПб., БХВ – Петербург, 2009. – 1200 с.

4. Гецци К., Джазайери М., Мандриоли Д. Основы инженерии программного обеспечения.–СПб.: БХВ-Петербург, 2005. – 832 с.

5. Грегори К. Использование Visual C++6. Специальное издание.– М.; СПб.; К.; Издательский дом «Вильямс», 2002.–864 с.

6. Румянцев П.В. Азбука программирования в Win32 API. – М.: Горячая линия – Телеком, 2004. – 312 с.

Издание третье, переработанное и дополненное

Рекомендовано Министерством общего и профессионального образования РФ в качестве учебного пособия для студентов высших учебных заведений

«Феникс»

Ростов-на-Дону

ББК 22. ЗЯ72 С 81

Рецензенты:

профессор, доктор психол. наук А. И. Галактионов (Институт психологии РАН)

профессор, доктор психол. наук Б. Б. Коссов (НИИ высшего образования Госкомитета РФ) профессор, доктор биол. наук П. Н. Ермаков (РГУ)

Столяренко Л.Д. С 81 Основы психологии. Издание третье, переработанное и дополненное. Серия «Учебники, учебные пособия». Ростов-на-Дону: «Феникс», 2000. -672 с.

В учебном пособии доступно излагаются основные понятия и современные научные сведения по следующим направлениям: «Психология познавательных процессов», «Психология сознания», «Психология личности», «Современные психологические концепции», «Возрастная психология», «Социальная психология», «Педагогическая психология».

Учебное пособие предназначено для студентов вузов, учащихся техникумов, для педагогов и психологов в системе высшего и среднего образования, для руководителей и всех тех, кто по роду своей деятельности работает с людьми и должен уметь учитывать психологию людей.

<== предыдущая лекция | следующая лекция ==>
Створення пробного додатку | 

Дата добавления: 2014-12-07; Просмотров: 219; Нарушение авторских прав?;


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



ПОИСК ПО САЙТУ:


Читайте также:
studopedia.su - Студопедия (2013 - 2022) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.045 сек.