- •О.С. Зеленський
- •Розділ 1. Загальні відомості створення додатку windows
- •1.1. Створення додатку Windows за допомогою майстра AppWizard
- •1.2. Варіанти майстрів для різних проектів
- •1.3. Короткий опис sdi програми
- •1.4. Короткий опис mdi програми
- •1.5. Короткий опис простого діалогового додатку
- •Контрольні питання
- •Розділ 2. Повідомлення і команди
- •2.1. Обробка повідомлень
- •2.2. Цикли обробки повідомлень
- •2.3. Карти повідомлень
- •Контрольні питання
- •Розділ 3. Документи та види
- •3.1. Клас додатку
- •3.2. Клас головного вікна
- •3.3. Клас документа
- •3.4. Класи виду
- •Контрольні питання
- •Розділ 4. Робота з клавіатурою, мишею і меню
- •4.1. Робота з клавіатурою
- •4.2. Робота з мишею
- •4.3. Робота з меню
- •Контрольні питання
- •Розділ 5. Виведення на екран
- •5.1. Класи графічних об'єктів
- •5.2. Робота зі шрифтами
- •5.3. Робота з пензликами та малювання графічних фігур
- •5.4. Робота з пензликом
- •5.5. Робота зі скролінгом
- •5.6. Приклад роботи з таблицями
- •5.7. Малювання на екрані маніпулятором "миша"
- •5.8. Завантаження та виведення на екран бітових зображень
- •5.9. Копіювання бітових образів
- •5.10. Малювання графічних об'єктів з використанням резинових контурів та метафайлів
- •5.11. Виділення графічних об'єктів у прямокутній області
- •5.12. Універсальний приклад роботи з двовимірною графікою з використанням резинового контуру
- •5.13. Запис на диск та зчитування з диску графічних об'єктів
- •5.14. Побудова кругових діаграм і гістограм
- •5.15. Користувацький режим роботи з графікою на прикладі малювання годинника Clock
- •Контрольні питання
- •Завдання
- •Розділ 6. Друк і попередній перегляд документів
- •6.1. Вибір і налаштування параметрів друку
- •6.2. Створення контекста пристрою
- •6.3. Друк документів і бібліотека mfc
- •6.4. Масштабування
- •6.5. Друк багатосторінкового документа
- •Контрольні питання
- •Розділ 7. Робота з файлами
- •7.1. Приклад роботи з файлами на основі класів cFile, cStdioFile та потоку fstream
- •7.1.1. Робота з класом cFile
- •7.1.2. Робота з потоком fstream
- •Можливі режими доступу
- •7.1.3. Робота з класом cStdioFile
- •7.2. Серіалізація даних, клас cArchive
- •7.3. Використання реєстру в додатках
- •Контрольні питання
- •Завдання
- •Розділ 8. Діалогові вікна
- •8.1. Створення діалогового вікна та простіші елементи керування
- •8.2. Робота зі списками і комбінованими полями
- •8.3. Ускладнений приклад зі списками
- •8.4. Робота з повзунками
- •8.5. Виведення бітових матриць в діалозі та у вікні виду
- •8.6. Лінійний регулятор, лінійний індикатор, інкриментний регулятор
- •8.7. Стандартні діалоги вибору файлів, шрифтів та кольору
- •8.8. Взаємоз'вязок діалога, документа та виду при розробці додатку
- •8.8.1. Клас cDialDoc
- •8.8.2. Клас cDialView
- •8.8.3. Клас Cdlg
- •8.9. Формування вхідного документа на основі діалогу
- •Контрольні питання
- •Завдання Робота з типовими елементами керування
- •Робота зі списками і комбінованими полями
- •Список літератури
6.4. Масштабування
Розглядаючи зображення у вікні попереднього перегляду, ви, безсумнівно, звернули увагу на те, що зображення прямокутника в ньому виглядає якось дрібнувато, особливо в порівнянні з "рідним" вікном програми. Це сталося тому, що піксель на екрані монітора і точка, як її розуміє принтер, мають різні розміри. Хоча в обох випадках – і в екранній версії, і в роздруківці – прямокутник має сторони рівної довжини, тобто є квадратом, на аркуші документа він значно менше. Таке співвідношення розмірів є наслідком встановлення режиму відображення MM_TEXT, що було зроблено в нашому додатку за замовчуванням. Якщо у вас є необхідність масштабувати зображення таким чином, щоб воно вписувалося в деякий заданий розмір, потрібно вибрати інший режим відображення. У табл. 6.1 перераховані режими відображення (mapping mode), які Windows надає у ваше розпорядження.
Таблиця 6.1
Режими відображення
Режим |
Одиниця виміру |
Координата | |
X |
Y | ||
ММ_НIENGLISH |
0,001 дюйма |
Зростає зліва направо |
Зростає знизу вгору |
MM_HIMETRIC |
0,01 мм |
Зростає зліва направо |
Зростає знизу вгору |
ММ_ISOTROPIC |
Визначається користувачем |
Визначається користувачем |
Визначається користувачем |
MM_LOENGLISH |
0,01 дюйма |
Зростає зліва направо |
Зростає знизу вгору |
MM_LOMETRIC |
0,1 мм |
Зростає зліва направо |
Зростає знизу вгору |
MM_TEXT |
Піксель пристрою |
Зростає зліва направо |
Зростає зверху вниз |
MM_TWIPS |
1 / 1440 дюйма |
Зростає зліва направо |
Зростає знизу вгору |
Робота з графікою в режимі MM_TEXT породжує певні проблеми, оскільки принтер і екран мають різні кількості елементів розкладання на сторінку. З графікою краще працювати в режимі MM_LOENGLISH, який використовує в якості одиниць розкладання соті частки дюйма, а не пікселі або точки принтера. Для того щоб в додатку Print1 використовувати режим відображення MM_LOENGLISH, замініть вставлений в функцію OnDraw() рядок наступними рядками:
pDC->SetMapMode(MM_LOENGLISH);
pDC->Rectangle(20, -20, 220, -220);
Перший оператор включає новий режим відображення у контекст пристрою. Другий задає малювання прямокутника з урахуванням напрямку осей нової системи координат. Від’ємні значення координат пояснюються тим, що для режиму MM_LOENGLISH вісь Х спрямована зліва направо, як і зазвичай в екранних системах координат, а вісь Y спрямована знизу вгору, а не навпаки. Більш того, за замовчуванням екранна система координат розташовується в правому нижньому квадранті загальноприйнятої декартової системи (Cartesian coordinate system), як це показано на рис. 6.6. Якщо встановлено режим накладення MM_LOENGLISH, то в роздруківці документа сторони прямокутника будуть мати довжину рівно по 2 дюйми. Це відбувається тому, що при виборі одиниці вимірювання в 1 / 100 дюйма задана довжина сторін прямокутника буде дорівнювати 200 одиницям.
Рис. 6.6. Положення системи координат в режимі відображення MM_LOENGLISH (за замовчуванням є похідним від загальноприйнятої декартової системи координат)