
- •Перелік умовних скорочень
- •2 Створення каркасу mfc-програми
- •2.2 Структура простої mfc – програми
- •3 Діалогові вікна та стандартні елементи керування
- •3.1 Модальні і немодальні діалогові вікна
- •//Зв’язування покажчика ed та ресурсу idc_edit1
- •4 Робота з графікою та текстом
- •5 Спільні елементи керування
- •Int cTabCtrl::SetCurSel(int nItem ); // nItem – номер елемента
- •6 Використання вікон властивостей та майстрів
- •7 Спеціальні типи меню Та їх використання
- •7.1 Загальні відомості про спеціальні типи меню
- •8 РозробкА програм для роботи з незалежними растровими зображеннями
- •8.2 Опис складових структур формату dib
- •8.4 Реалізація функцій класу cDib
- •9 Елементи концепції “документ – вигляд”
- •9.1 Загальні особливості концепції “Документ – вигляд”
- •Приклад 9.1 – Реалізація класу головного вікна відповідно до концепції “Документ – вигляд”
- •Приклад 9.2 – Вигляд класу документа для проекту відповідно до кон-цепції “Документ – вигляд”
- •9.2.4 Створення шаблону документа
- •9.2.5 Ініціалізація програми
- •10 Основи програмування баз даних
- •10.1 Загальні відомості про odbc
- •11 Використання потокової багатозадачності
- •12 Використання графічної бібліотеки opeNgl
- •Визначення парамерів текстури може забезпечуватися командами сімей-ства glTexParameter*():
- •Розробка системи планування робота
- •Післямова
- •Перелік посилань
- •Додаток а
- •Предметний покажчик
- •61166 Харків, просп. Леніна, 14.
Приклад 9.1 – Реалізація класу головного вікна відповідно до концепції “Документ – вигляд”
сlass CMainFrame : public CFrameWnd
{DECLARE_DYNCREATE(CMainFrame)
public: CMainFrame ();
DECLARE_MESSAGE_MAP()
};
Клас документа породжується від класу CDocument. Він також містить макрос DECLARE_DYNCREATE() для забезпечення динамічного створення об’єктів. Також клас документа у складі містить карту повідомлень усіх команд, пов’язаних із змінами стану документа. Функції класу мають забезпечувати обробку даних документа.
Деякі функції класу CDocument мають перевизначатися. Наприклад, функція virtual BOOL CDocument::OnNewDocument();
Доволі часто наново визначається також і функція Serialize(). Приклад 9.2 ілюструє створення класу документа.
Приклад 9.2 – Вигляд класу документа для проекту відповідно до кон-цепції “Документ – вигляд”
class CSampleDoc : public CDocument
{DECLARE_DYNCREATE(CSampleDoc)
public:
CSampleDoc();
BOOL OnNewDocument();
void Serialize(Carchive &arch);
DECLARE_MESSAGE_MAP()
};
Клас вигляду забезпечує керування відображенням документа. Об’єкт класу перекриває об’єкт головного вікна програми і забезпечує виконання основних функцій. При цьому такі операції, як зміна розміру вікна та згортання-розгортання все-таки залишаються за класом головного вікна та його обробниками. Клас вигляду є нащадком класу CView або будь-якого дочірнього до CView класу (наприклад CScrollView). Клас вигляду також оголошується динамічним і містить макрос DECLARE_DYNCREATE().
Клас СView містить ряд корисних функцій. Під час створення програми не обов’язково перевизначати більшість з них. Але одна функція – OnDraw() має перевизначатися завжди. OnDraw() викликається якщо вигляд документа програми має оновлюватися і у цьому сенсі нагадує функцію OnPaint(). OnDraw() має такий прототип:
virtual void CView::OnDraw ( CDC* pDC ) = 0;
де pDC – є покажчиком на контекст пристрою, що має використовуватися для відображення документа. Зазначимо, що раніше у функції OnPaint() було необхідно отримувати поточний контекст пристрою вікна, а у функції OnDraw() він є параметром за замовчуванням. Функція OnDraw() має перевизначатися у кожному класі, дочірньому від СView.
Приклад 9.3 демонструє вигляд класу вигляду у своїй найстислішій формі.
Приклад 9.3 – Клас вигляду відповідно до концепції “Документ – вигляд”
сlass CSampleView : public CView
{DECLARE_DYNCREATE(CSampleView)
public: void OnDraw(CDC *dc);
DECLARE_MESSAGE_MAP()
};
Для забезпечення увімкнення режиму динамічного створення об’єктів необхідно, по-перше, додати макроси DECLARE_DYNCREATE() до описів відповідних створюваних класів, по-друге, – додати у програмний файл макрокоманди IMPLEMENT_ DYNCREATE() для класів вікна, вигляду та документа:
IMPLEMENT_ DYNCREATE(CMainFrame, CFrameWnd)
IMPLEMENT_ DYNCREATE(CSampleView, CView)
IMPLEMENT_ DYNCREATE(CSampleDoc, CDocument)
9.2.4 Створення шаблону документа
Породжені класи документа, вигляду, головного вікна мають об’єднуватися у шаблоні документа.
Шаблон SDI-документа є об’єктом класу CSingleDocTemplate. Його конструктор має вигляд:
CSingleDocTemplate::CSingleDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass, CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass );
Параметрами конструктора є:
nIDResource – що визначає ідентифікатор ресурсів, які використовуються необхідним типом документа (може містити меню, піктограми, акселератори та ресурси у вигляді рядків тексту);
pDocClass – покажчик на динамічно створюваний об’єкт класу документа; цей клас є спадкоємцем CDocument, що визначається для подання документів програми;
pFrameClass – покажчик на динамічно створюваний об’єкт класу го-ловного вікна; цим класом може бути клас, породжений від CFrameWnd або безпосередньо сам клас CFrameWnd, якщо головне вікно програми успадковує усі властивості CFrameWnd за замовчуванням;
pViewClass – покажчик на динамічно створюваний об’єкт класу вигляду; клас виводиться з CView і має на меті відображення документів проекту.
Ресурс у вигляді рядка складається з підрядків (кількістю до семи), що відокремлюються один від одного символом '\n' символ (символ '\n' також використовується як заповнювач, якщо підрядок є порожнім). У підрядках описується тип документа. Приклад ресурсного рядка наведений у прикладі 9.4:
Приклад 9.4 – Приклад опису ресурсного рядка
// MYCALC.RC
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
IDR_MAINFRAME "MyCalc Windows Application \nSheet \nWorksheet
\n Worksheets (*.myc) \n.myc \nMyCalcSheet \n MyCalc Worksheet"
END
Ресурсний рядок складається з таких елементів:
заголовок вікна;
ім’я документа за замовчуванням (інакше - Untitled);
ім’я типу документа;
ім’я фільтра файлів (“File of type”);
розширення файлів документа (наприклад “*.txt”);
ідентифікатор файла у базі даних реєстрації;
імена типу файла у базі даних реєстрації.