- •О.С. Зеленський
- •Розділ 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. Формування вхідного документа на основі діалогу
- •Контрольні питання
- •Завдання Робота з типовими елементами керування
- •Робота зі списками і комбінованими полями
- •Список літератури
8.7. Стандартні діалоги вибору файлів, шрифтів та кольору
Стандартні діалоги вибору файлів
Для вибору файлів використовується діалогове вікно класу CFileDialog. Відкрити файл за допомогою цього класу дуже просто. Ось приклад коду, який відкриває файл, вибраний користувачем у діалоговому вікні:
CFileDialog dlg(TRUE, "bmp", "*.bmp");
if (dlg.DoModal() == IDOK) {
CFile file;
VERIFY(file.Open(dlg.GetPathName(), CFile::modeRead));
.............................................................
}
Перший параметр (TRUE) конструктора вказує, що даний об'єкт – це діалогове вікно «File Open», а не «File Save», «bmp» – це розширення файлів за замовчуванням, а рядок «*.bmp» з’явиться у вікні введення імені файлу. Функція CFileDialog::GetPathName повертає об'єкт CString, який містить повне ім'я вибраного файлу (із зазначенням шляху). Приклад діалогового вікна для відкриття файлів показано на рис. 8.12:
Рис. 8.12. Стандартний діалог для вибору файлів
Стандартні діалоги вибору шрифтів
Стандартний діалог вибору шрифтів показано на рис. 8.13. Вибір параметрів шрифту через стандартне діалогове вікно ми вже описували у п 5.5. Цей діалог можливо створити за допомогою стандартної функції ChooseFont, або за допомогою класу CFontDialog, у якому використовується ця функція. Розглянемо код для створення діалогу вибору шрифтів на основі класу:
LOGFONT lf; // структура з параметрами шрифту
lf.lfHeight=-20; // задання початкових параметрів шрифту
..............................................................
CFontDialogdlgFont(&lf);
if (dlgFont.DoModal()==IDOK)
{
dlgFont.GetCurrentFont(&lf);
CFont cf;
cf.CreateFontIndirect(&lf);
}
Рис. 8.13. Стандартний діалог для вибору шрифтів
Для виклику діалогу необхідно створити об'єкт класу CFontDialog, який запускається на виконання функцією DoModal. Якщо результат роботи функції повертає IDOK, то можна використати функцію GetCurrentFont щоб отримати структуру LOGFONT, із якої можливо сформувати клас шрифту. В структурі LOGFONT містяться усі характеристики шрифту, але їх можливо отримати і за допомогою функцій класу CFontDialog:
Таблиця 8.3
Функції класу CFontDialog, які дозволяють отримати характеристики вибраного шрифту
Функція |
Опис |
GetFaceName |
ім'я вибраного шрифту |
GetStyleName |
стиль вибраного шрифту |
GetSize |
розмір вибраного шрифту |
GetColor |
колір вибраного шрифту |
GetWeight |
ширина вибраного шрифту |
IsStrikeOut |
чи є шрифт перекресленим лінією ? |
IsUnderline |
чи є шрифт підкресленним ? |
IsBold |
чи є шрифт жирним ? |
IsItalic |
чи є шрифт нахиленим ? |
Стандартний діалог вибору кольору
Стандартний діалог вибору кольору показано на рис. 8.14. Діалог вибору кольору створюється за допомогою класу CColorDialog, у якому використовується ця функція.
Рис. 8.14. Стандартний діалог для вибору кольору
Розглянемо код для створення діалогу вибору кольору на основі класу:
COLORREF m_Color = RGB(255,0,0);
CColorDialog color(m_Color);
if (color.DoModal()==IDOK)
{
m_Color = color.GetColor();
.................................................
}
Принцип роботи функції OnColor такий же як і у OnFont. Відмінності полягають в тому, що викликається діалог зміни кольору CColorDialog, який є стандартним класом діалогу для вибору кольору у Windows. А його функція GetColor повертає значення зміненого у діалозі кольору.
Для виклику діалогу необхідно створити об'єкт класу CColorDialog, який запускається на виконання функцією DoModal. Якщо результат роботи функції повертає IDOK, то можна використати функцію GetColor щоб отримати вибраний колір COLORREF.