
- •Відповіді на контрольні питання до контрольної роботи з ооп Короткий конспект
- •Структура програм для windows.
- •Типи даних win32.
- •Карти повідомлень.
- •Огляд класів вікон бібліотеки mfc. Самий базовий клас бібліотека mfc (клас cobject)
- •Основні складові програм на базі бібліотеки класів mfc.
- •Мінімальна програма для windows.
- •Архітектура програми документ – облік.
- •Обмен данными диалога
- •Модальні та немодальні діалогові вікна.
- •Библиотека mfc
- •Каркас приложения
- •Проект приложения
- •Типы мастеров проектов
- •Имена, используемые в mfc
- •Метод oninitdialog
- •Класс диалоговой панели и его реализация
- •Обмен данными диалога
- •Главный класс приложения
- •Управління пам’яттю в mfc
Огляд класів вікон бібліотеки mfc. Самий базовий клас бібліотека mfc (клас cobject)
Переважна більшість класів MFC успадкована від базового класу CObject, лежачого в основі всієї ієрархії класів цієї бібліотеки. Методи і елементи даних класу CObject представляють найбільш загальні властивості успадкованих з нього класів MFC.
Клас CObject, а також всі класи, успадковані від нього, забезпечують можливість збереження об'єктів класу у файлах на диску з їх подальшим відновленням.
Для об'єктів класів, успадкованих від базового класу CObject, вже під час роботи додатку можна одержати різноманітну інформацію про клас об'єкту.
Ряд методів класу CObject призначений для отримання дампу об'єктів класу під час відладки додатку. Ця особливість класу може прискорити процес пошуку помилок в додатку.
Основа структури додатку (клас CCmdTarget)
Безпосередньо від класу CObject успадковуються ряд класів, які самі є базовими для решти класів MFC. В першу чергу це клас CCmdTarget, що представляє основу структури будь-якого додатку. Основною особливістю класу CCmdTarget і класів, успадкованих від нього, є те, що об'єкти цих класів можуть одержувати від операційної системи повідомлення і обробляти їх. Від класу CCmdTarget успадковується декілька класів, короткий опис яких слідує нижче.
Підзадачі додатку (класи CWinThread і CWinApp)
Від класу CCmdTarget успадковується клас CWinThread, що представляє підзадачі додатку. Прості додатки, які розглядатимуться далі, мають тільки одну підзадачу. Ця підзадача, звана головною, представляється класом CWinApp, успадкованим від класу CWinThread.
Документ додатку (клас CDocument)
Більшість додатків працюють з даними або документами, що зберігаються на диску в окремих файлах. Клас CDocument, успадкований від базового класу CCmdTarget, служить для представлення документів додатку.
Шаблон документів (класи CDocTemplate, CSingleDocTemplate і CMultiDocTemplate)
Ще один важливий клас, успадковані від CCmdTarget, називається CDocTemplate. Від цього класу успадковується два класи: CSingleDocTemplate і CMultiDocTemplate. Всі ці класи призначені для синхронізації і управління основними об'єктами, що представляють додаток, - вікнами, документами і використовуваними ними ресурсами.
Вікна (клас CWnd)
Практично всі додатки мають призначений для користувача інтерфейс, побудований на основі вікон. Це може бути діалогова панель, одне вікно або декілька вікон, зв'язаних разом. Основні властивості вікон представлені класом CWnd, успадкованим від класу CCmdTarget.
Програмісти дуже рідко створюють об'єкти класу CWnd. Клас CWnd сам є базовим класом для великої кількості класів, що представляють різноманітні вікна. Перерахуємо класи, успадковані від базового класу CWnd.
Що обрамляють вікна (клас CFrameWnd). Клас CFrameWnd представляє вікна, виступаючі в ролі обрамляючих вікон, зокрема головні вікна додатків. Від цього класу також успадковуються класи CMDIChildWnd і CMDIFrameWnd, використовувані для відображення вікон багатовіконного інтерфейсу MDI. Клас CMDIFrameWnd представляє головне вікно додатку MDI, а клас CMDIChildWnd - його дочірні вікна MDI. Клас CMiniFrameWnd застосовується для відображення вікон зменшеного розміру. Такі вікна звичайно використовуються для відображення в них панелі управління.
Вікна органів управління. Для роботи з органами управління (кнопки, смуги прокрутки, редактори тексту і т.д.) в бібліотеці MFC передбачені спеціальні класи, успадковані безпосередньо від класу CWnd. Перерахуємо ці класи:
CAnimate - використовується для відображення відеоінформації.
CBitmapButton - кнопка з малюнком.
CButton - кнопка.
CComboBox - список з вікном редагування.
CEdit - поле редагування.
CHeaderCtrl - заголовок для таблиці.
CHotKeyCtrl - призначений для введення комбінації клавіш акселераторів.
CListBox - список.
CListCtrl - може використовуватися для відображення списку піктограм.
CProgressCtrl - лінійний індикатор.
CPropertySheet - блокнот. Може складатися з декількох сторінок.
CRichEditControl - вікно редагування, в якому можна редагувати форматований текст.
CScrollBar - смуга перегляду.
CSliderCtrl - движок.
CSpinButtonCtrl - звичайно використовується для збільшення або зменшення значення якого-небудь параметра.
CStatic - статичний орган управління.
CTabCtrl - набір "закладок".
CToolBarCtrl - панель управління.
CToolTipCtrl - маленьке вікно, що містить рядок тексту.
CTreeCtrl - орган управління, який дозволяє проглядати ієрархічні структури даних.
Панелі, що управляють (класи CControlBar, CToolBar, CStatusBar, CDialogBar). Клас CControlBar і класи, успадковані від нього, призначені для створення панелей, що управляють. Такі панелі можуть містити різні органи управління і відображаються, як правило, у верхній або нижній частині головного вікна додатку.
Так, клас CToolBar призначений для створення панелі управління. Ця панель звичайно містить ряд кнопок, дублюючих дію меню додатку.
Клас CStatusBar управляє панеллю стану. Панель стану відображається у вигляді смуги в нижній частині вікна. У ній додаток може відображати всіляку інформацію, наприклад, коротку підказку про вибраний рядок меню.
Великі можливості представляє панель, що управляє, створена на основі класу CDialogBar. Така панель використовує звичайний шаблон діалогової панелі, яку можна розробити в редакторі ресурсів Visual C++.
Вікна перегляду (клас CView і класи, успадковані від нього). Великий інтерес представляють клас CView і класи, успадковані від нього. Ці класи представляють вікно проглядання документів додатку. Саме вікно перегляду використовується для висновку на екран документа, з яким працює додаток. Через це вікно користувач може змінювати документ.
Розробляючи додаток, програмісти успадковують власні класи проглядання документів або від базового класу CView, або від одного з декількох породжених класів, визначених в бібліотеці MFC.
Класи, успадковані від CCtrlView, використовують для відображення готові органи управління. Наприклад, клас CEditView використовує орган управління edit (редактор).
Клас CScrollView представляє вікно перегляду, яке має смуги згортки. У класі визначені спеціальні методи, що управляють смугами перегляду.
Клас CFormView дозволяє створити вікно проглядання документа, засноване на діалоговій панелі. Від цього класу успадковується ще два класи CRecordView і CDaoRecordView. Ці класи використовуються для проглядання записів баз даних.
Діалогові панелі (клас CDialog і класи, успадковані від нього ). Від базового класу успадковуються класи, що управляють діалоговими панелями. Якщо необхідно створити діалогову панель, можна успадковувати клас від CDialog.
Разом з діалоговими панелями звичайно використовується клас CDataExchange. Клас CDataExchange забезпечує роботу процедур обміну даними DDX (Dialog Data Exchange) і перевірки даних DDV (Dialog Data Validation), використовуваних для діалогових панелей. На відміну від CDialog клас CDataExchange не успадковується від якого-небудь іншого класу.
Від класу CDialog успадковується ряд класів, що є стандартними діалоговими панелями для вибору шрифту, кольору, виведення документа на друк, пошуку в документі певної послідовності символів, а також пошуку і заміни однієї послідовності символів іншою послідовністю.
Щоб створити стандартний діалог, можна просто визначити об'єкт відповідного класу. Подальше управління такою панеллю здійснюється методами класу.
Масиви, списки, словники
До складу MFC включений цілий набір класів, призначених для зберігання інформації в масивах, списках і словниках. Всі ці класи успадковані від базового класу CObject.
Не дивлячись на те, що в мові C визначено поняття масиву, класи MFC забезпечують ширші можливості. Наприклад, можна динамічно змінювати розмір масиву, визначеного за допомогою відповідного класу.
Для представлення масивів призначені наступні класи:
CByteArray - байти.
CDWordArray - подвійні слова.
CObArray - покажчики на об'єкти класу CObject.
CPtrArray - покажчики типу void.
CStringArray - об'єкти класу CString.
CUIntArray - елементи класу unsigned integer або UINT.
CWordArray - слова.
Для вирішення багатьох завдань застосовуються такі структури зберігання даних, як списки. MFC включає ряд класів, успадкованих від базового класу CObject, які представляють програмісту готове для створення власних списків. У цих класах визначені всі методи, необхідні при роботі із списками, - додавання нового елементу, вставка нового елементу, визначення наступного або попереднього елементу в списку, видалення елементу і т.д.
Перерахуємо класи списків, які дозволяють побудувати списки з елементів будь-яких типів будь-яких класів:
CObList - покажчики на об'єкти класу CObject.
CPtrList - покажчики типу void.
CStringList - об'єкти класу CString.
У бібліотеці MFC визначена ще одна група класів, що дозволяє створювати словники. Словник є таблицею з двох колонок, що встановлюють відповідність двох величин. Перша величина представляє ключове значення і записується в першу колонку, а друга - пов'язане з нею значення, що зберігається в другій колонці. Словник дозволяє додавати в нього пари зв'язаних величин і здійснювати вибірку значень по ключовому слову.
Для роботи із словниками використовуються класи:
CMapPtrToPtr - ключове слово - покажчик типу void, пов'язане з ним значення - покажчик типу void.
CMapPtrToWord - ключове слово - покажчик типу void, пов'язане з ним значення - слово.
CMapStringToOb - ключове слово - об'єкти класу CString, пов'язане з ним значення - покажчик на об'єкти класу CObject.
CMapStringToPtr - ключове слово - об'єкти класу CString, пов'язане з ним значення - покажчик типу void.
CMapStringToString - ключове слово - об'єкти класу CString, пов'язане з ним значення - на об'єкти класу CObject.
CMapWordToOb - ключове слово - слово, пов'язане з ним значення - покажчик на об'єкти класу CObject.
CMapWordToPtr- ключове слово - слово, пов'язане з ним значення - покажчик типу void.
Файлова система (клас CFile)
Бібліотека MFC включає клас для роботи з файловою системою комп'ютера. Він називається CFile і також успадковується від базового класу CObject. Безпосередньо від класу CFile успадковується ще декілька класів - CMemFile, CStdioFile, CSocketFile.
При роботі з файловою системою може потрібно одержати різну інформацію про деякий файл, наприклад, дату створення, розмір і т.д. Для зберігання цих даних призначений спеціальний клас CFileStatus. Клас CFileStatus - один з небагатьох класів, які не успадковуються від базового класу CObject.
Контекст відображення (клас CDC)
Для відображення інформації у вікні або на будь-якому іншому пристрої додаток повинен одержувати так називаєми контекст відображення. Основні властивості контексту відображення визначені в класі CDC. Від нього успадковується 4 різних класу, представляючі контекст відображення різних пристроїв.
Дамо короткий опис класів, успадкованих від CDC:
CClientDC - контекст відображення, пов'язаний з внутрішньою областю вікна (client area). Для отримання контексту конструктор класу викликає функцію програмного інтерфейсу GetDC, а деструкція - функцію ReleaseDC.
CMetaFileDC - клас призначений для роботи з метафайлами.
CPaintDC - конструктор класу CPaintDC для отримання контексту відображення викликає метод CWnd::BeginPaint, деструкція - метод CWnd::EndPaint. Об'єкти даного класу можна використовувати тільки при обробці повідомлення WM_PAINT. Це повідомлення звичайно обробляє метод OnPaint.
CWindowDC - контекст відображення, пов'язаний зі всім вікном. Для отримання контексту конструктор класу викликає функцію програмного інтерфейсу GetWindowDC, а деструкція - функцію ReleaseDC.
Об'єкти графічного інтерфейсу (клас CGdiObject)
Для відображення інформації використовуються різні об'єкти графічного інтерфейсу - GDI-об'єкти. Для кожного з цих об'єктів бібліотека MFC містить клас, що описує його, успадкований від базового класу CGdiObject.
Для роботи з GDI-об'єктами використовуються класи:
CBitmap - растрове зображення bitmap.
CBbrush - кисть.
CFont - шрифт.
CPalette - палітра кольорів.
CPen - -перо.
CRgn - область усередині вікна.
Меню (клас CMenu) Практично кожен додаток має власне меню. Воно, як правило, відображається у верхній частині головного вікна додатку. Для управління меню до складу MFC включений спеціальний клас CMenu, успадкований безпосередньо від базового класу CObject.
Для управління меню і панелями використовується також клас CCmdUI. Цей клас не успадковується від базового класу CObject.
Об'єкти класу CCmdUI створюються, коли користувач вибирає рядок меню або натискає кнопки панелі управління. Методи класу CCmdUI дозволяють управляти рядками меню і кнопками панелі управління. Наприклад, існує метод, який робить рядок меню неактивної.
Інші класи
У MFC включено декілька класів, що забезпечують підтримку додатків, що працюють з базами даних. Це такі класи, як CDataBase, CRecordSet, CDaoDataBase. CDaoRecordSet, CDaoQueryDef, CDaoTableDef, CDaoWorkSpace, CLongBinary, CFieldExchange і CDaoFieldExchange.
Бібліотека MFC дозволяє створювати багатозадачні додатки. Для синхронізації окремих завдань додатку передбачений ряд спеціальних класів. Всі вони успадковуються від класу CSyncObject, що є абстрактним класом.
В деяких випадках потрібний, щоб ділянка програмного коду могла виконуватися тільки одним завданням. Таку ділянку називають критичною секцією коду. Для створення і управління критичними секціями призначені об'єкти класу CCriticalSection.
Об'єкти класу CEvent представляють подію. За допомогою подій одне завдання додатку може передати повідомлення іншої.
Об'єкти класу CMutex дозволяють в даний момент надати ресурс в користування однієї тільки завданню. Решті завдань доступ до ресурсу забороняється.
Об'єкти класу CSemafore є семафорами. Семафори дозволяють обмежити кількість завдань, які мають доступ до якого-небудь ресурсу.
Для програмістів, що займаються мережевими комунікаціями, до складу бібліотеки MFC включені класи CAsyncSocket і успадкований від нього клас CSocket. Ці класи полегшують завдання програмування мережевих додатків.
Окрім вже описаних класів бібліотека MFC включає велику кількість класів, призначених для організації технології OLE.
Класи, що не мають базового класу
Окрім класів, успадкованих від базового класу CObject, бібліотека MFC включає ряд самостійних класів. У них немає загального базового класу, і мають різне призначення.
Декілька класів, які не успадковуються від базового класу CObject, вже згадувалися. До ним відносяться класи CCmdUI, CFileStatus, CDataExchange, CFieldExchange і CDaoFieldExchange.
Прості класи. Бібліотека MFC містить класи, відповідні об'єктам типу простих геометричних фігур, текстових рядків і об'єктам, що визначають дату і час:
CPoint - об'єкти класу описують крапку.
CRect - об'єкти класу описують прямокутник.
CSize - об'єкти класу визначають розмір прямокутника.
CString - об'єкти класу є текстовими рядками змінної довжини.
CTime - об'єкти класу служать для зберігання дати і часу. Велика кількість методів класу дозволяє виконувати над об'єктами класу різні перетворення.
CTimeSpan - об'єкти класу визначають період часу.
Архівний клас (клас CArchive). Клас CArchive використовується для збереження і відновлення стану об'єктів у файлах на диску. Перед використанням об'єкту класу CArchive він повинен бути прив'язаний до файлу - об'єкту класу CFile.
Інформація про клас об'єкту (структура CRuntimeClass). У багатьох випадках буває необхідно вже під час роботи додатку одержувати інформацію про клас і його базовий клас. Для цього будь-який клас, успадкований від базового класу CObject, пов'язаний із структурою CRuntimeClass. Вона дозволяє визначити ім'я класу об'єкту, розмір об'єкту в байтах, покажчик на конструктор класу, що не має аргументів, і деструкцію класу. Можна також дізнатися подібну інформацію про базовий клас і деякі додаткові відомості.
Відладка додатку (класи CDumpObject, CMemoryState). У налагоджувальній версії додатку можна використовувати клас CDumpContext. Він дозволяє видавати стан різних об'єктів в текстовому вигляді.
Клас CMemoryState дозволяє локалізувати проблеми, пов'язані з динамічним виділенням оперативної пам'яті. Такі проблеми звичайно виникають, коли користувач виділяє пам'ять, застосовуючи оператора new, а потім забуває повернути цю пам'ять операційній системі.
Друк документа (клас CPrintInfo). Клас CPrintInfo призначений для управління друком документів на принтері. Коли користувач відправляє документ на друк або виконує попередній перегляд документа перед друком, створюється об'єкт класу CPrintInfo. Він містить різну інформацію про те, які сторінки документа друкуються, і т.д.