- •О.С. Зеленський
- •Розділ 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. Формування вхідного документа на основі діалогу
- •Контрольні питання
- •Завдання Робота з типовими елементами керування
- •Робота зі списками і комбінованими полями
- •Список літератури
3.2. Клас головного вікна
Коли шаблон документа готовий, створюється динамічний об'єкт класу головного вікна програми CMainFrame. Об'єкт класу, похідний від CFrameWnd, створюється у два етапи. Спочатку викликається конструктор, який створює об'єкт класу CFrameWnd, а потім викликається функція CFrameWnd::LoadFrame, завантажується головне вікно програми та пов'язані з ним ресурси, а також пов'язує завантажене вікно з об'єктом класу, похідного від класу CMainFrame.
У ресурсі, ідентифікатор якого передається функції як параметр, визначені меню, таблиця призначення клавіш, значки і рядковий ресурс заголовка вікна. Для самостійного завдання всіх параметрів створення вікна замість функції LoadFrame слід використовувати функцію CFrameWnd::Create. Додаток викликає функцію LoadFrame при створенні головного вікна програми з використанням об'єкта класу шаблону документа.
Отримана вказівка на об'єкт головного вікна програми привласнюється ідентифікатору m_pMainWnd, є членом класу програми. Значення цієї змінної може бути використано для безпосереднього доступу до об'єкта головного вікна програми.
Наступним кроком з ініціалізації програми є створення об'єкта класу CCommandLineInfo, використовуваного для виділення параметрів ініціалізації програми з командного рядка. Створений об'єкт передається в якості аргументу функції ParseCommandLine. Для кожного елемента командного рядка функція ParseCommandLine викликає функцію CCommandLineInfo::ParseParam, яка зберігає його значення в об'єкті CCommandLineInfo. Цей об'єкт потім передається функції ProcessShellcommand, що виробляє дії, зумовлені значеннями аргументів і прапорів командного рядка. Функція ProcessShellcommand повертає нульове значення, якщо процес завершився нормально, і нуль - в іншому випадку.
На виклику цієї функції слід зупинитися окремо. Розробники з Microsoft не припускали, що за допомогою Visual C++ будуть розроблятися будь-які інші програми, крім текстових редакторів, тому передбачили при запуску багатовіконної програми виведення на екран порожнього вікна. Доцільність такого підходу сумнівна навіть у текстовому редакторі, оскільки в більшості випадків користувач не розпочинає створення нового документа, а займається редагуванням старого. Проте в даному випадку ще можна зрозуміти, навіщо на екрані з'явилося порожнє вікно. Але, уявіть собі, що порожнє вікно з'являється у додатку, створеному для обробки й аналізу різних типів сигналів, кожен з яких представлений своїм типом документа. Вікно якого типу документа має виводитися при запуску програми? І що повинен робити користувач з порожнім вікном? Не малювати ж у ньому вручну спектр сигналу. Тому гарним тоном в серйозних додатках вважається відсутність будь-яких вікон під час запуску програми на виконання.
Але майстер створення додатків MFC створює додаток, виводить пусте вікно на екран. Що ж робити? Найбільш простим рішенням є знищення умовного оператора, що містить виклик функції ProcessShellcommand, або закоментуйте його, якщо вам не хочеться видаляти оператори із заготівки додатку. При цьому не слід забувати, що умовний оператор включає в себе не тільки сам оператор, а й оператор return, виконання якого залежить від величини, що повертається функцією ProcessShellcommand. У цьому випадку програма не буде обробляти командний рядок, але більшість додатків Windows його не використовують.
Функція CWnd::Showwindow встановлює режим відображення вікна, наприклад, стандартний розмір відображуваного вікна, вікно, розгорнуте на весь екран або відображуване як піктограма. При виклику цієї функції в процедурі InitInstance її аргументом є CWinApp::m_nCmdShow. При наступних її виклики в якості аргументу необхідно безпосередньо вказувати режими відображення вікна, для позначення яких існують зумовлені величини.
Останнім виконавчим оператором процедури InitInstance є виклик функції CWnd::UpdateWindow, що робить перемальовування робочої області вікна шляхом посилки повідомлення WM_PAINT в тому випадку, якщо ця ділянка не порожня. Дана функція здійснює безпосередню посилку повідомлення WM_PAINT, не поміщаючи його в чергу додатків.
Якщо програма дійшла до цієї точки, то ініціалізація програми вважається успішно завершеною, тому функція повертає значення TRUE.
Крім опису класу додатка даний файл містить також опис класу діалогового вікна довідки про програму.