70
Въведение Целта на дисциплината Програмни Системи (ПС) е изучаването на технологии за създаване на програмно осигуряване (пр. системи) чрез създаване на приложения под Операционната Система (ОС) Windows и Microsoft Visual С++. Тези приложения имат трислойна архитектура, включваща потребителски диалог, бизнес логика и Бази Данни (БД). Потребителският диалог включва: управление на събития; управление на прозорци, управление на ресурси – памет и устройства за вход, ресурси в Windows; обмен на данни между приложенията; технологии при големи приложения DLL (Dynamic Link Libraries), COM (Component Object Model ), MFC Microsoft Foundation Class Library ATL (Active Template Library), БД- ODBC. Основните концепции в ОС Windows могат да се формулират като: преместваемост на изпълнимите приложения; обектна ориентация на програмирането на приложенията. ИЗПОЛЗВАНИ СЪКРАЩЕНИЯ Active Template Library (ATL) библиотека от шаблони Microsoft Foundation Classes Library (MFC) Application Programming Interface (API) динамична библиотека с функции, които реализират всички необходими системни действия Graphic Device Interface (GDI) подмножество на API, интерфейс на графични устройства Component Object Model (COM) Run Time Libraries (RTL) Object Linking Embedding (OLE) Свързване и вграждане на обекти Dynamic Link Libraries (DLL) динамична библиотека Microsoft Foundation Class Library (MFC) библиотека от базови класове обекти на фирмата Microsoft Microsoft Developer Network (MSDN) библиотеката знания

Интегрирана развойна среда MS Visual C++Файлове, създавани в средата на Microsoft Visual C++ Средата използва следните

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

  • Въведение

    Целта на дисциплината Програмни Системи (ПС) е изучаването на технологии за

    създаване на програмно осигуряване (пр. системи) чрез създаване на приложения

    под Операционната Система (ОС) Windows и Microsoft Visual С++. Тези приложения

    имат трислойна архитектура, включваща потребителски диалог, бизнес логика и

    Бази Данни (БД).

    Потребителският диалог включва: управление на събития; управление на прозорци,

    управление на ресурси – памет и устройства за вход, ресурси в Windows; обмен на

    данни между приложенията; технологии при големи приложения – DLL (Dynamic Link

    Libraries), COM (Component Object Model ), MFC Microsoft Foundation Class Library

    ATL (Active Template Library), БД- ODBC.

    Основните концепции в ОС Windows могат да се формулират като:

    преместваемост на изпълнимите приложения;

    обектна ориентация на програмирането на приложенията.

    ИЗПОЛЗВАНИ СЪКРАЩЕНИЯ

    Active Template Library (ATL) – библиотека от шаблони

    Microsoft Foundation Classes Library (MFC)

    Application Programming Interface (API) динамична библиотека с функции, които

    реализират всички необходими системни действия

    Graphic Device Interface (GDI) подмножество на API, интерфейс на графични

    устройства

    Component Object Model (COM)

    Run Time Libraries (RTL)

    Object Linking Embedding (OLE) – Свързване и вграждане на обекти

    Dynamic Link Libraries (DLL) динамична библиотека

    Microsoft Foundation Class Library (MFC) – библиотека от базови класове обекти на

    фирмата Microsoft

    Microsoft Developer Network (MSDN) библиотеката знания

  • Интегрираната развойна среда MS Visual C++

    Средата за разработка на програми Microsoft Visual C++ Интегрирана развойна

    среда MS Visual C++ (Integrated Development Environment – (IDE)) е предназначена

    за създаването на приложения – програми, снабдени с всичко необходимо за

    тяхната работа. В Microsoft Visual C++ приложенията често се разработват на

    основата на Microsoft Foundation Class Library (MFC) – библиотека от базови

    класове обекти на фирмата Microsoft, макар че има възможност и за създаването и

    на други типове програми. Такива приложения представляват съвкупност от обекти,

    които самото приложение и неговите компоненти: документи, вид на документите,

    диалози и т.н.

    Всяко приложение взаимодейства с Windows чрез Application Programming

    Interface (API). API съдържа няколко стотици функции, които реализират всички

    необходими системни действия, такива като отделяне на памет, създаване на

    прозорци, извеждане на екран и т.н. Функциите API се съдържат в динамични

    библиотеки Dynamic Link Libraries (DLL), които се зареждат в паметта само в този

    момент, когато към тях има обръщение. Едно от подмножествата на API е Graphic

    Device Interface (GDI) – интерфейса на графични устройства. Задачата на GDI е

    да обезпечи апаратната независимост на графиката. На GDI се дължи това, че

    приложенията могат да се изпълняват на различни компютри.

    Интерфейсът на Microsoft Visual C++ 6.0 включва удобни средства за създаването и

    редактирането на всички типове ресурси. Такива са мощното средство за скелетни

    приложения (AppWizard), а така също средството за създаване и управление на

    класовете на приложението (ClassWizard). Създаването на просто приложение,

    което едновременно ще съдържа пълноценен интерфейс и което ще създава

    стандартен прозорец със стандартните елементи на управление става с

    инструменталното средство на Visual C++ AppWizard. То позволява значително да

    се упрости процеса на създаване на приложение на основата на MFC. При работа с

    този инструмент се появява последователност от диалогови прозорци, в които

    AppWizard задава на програмиста въпроси. В процеса на диалога потребителя

    определя тип и характеристиките на проекта, който той иска да разработи.

    Определяйки какви класове от библиотеката MFC са необходими за този проект

    приложения и строи основите на всички нужни производни класове. По-нататък

    програмиста определя свойствата и поведението на обектите на тези класове.

    Проектът на приложенията обединява в себе си описанията на класовете,

    описанията на ресурсите и т.н.

  • Неоценима помощ при разработката на програми може да укаже библиотеката

    знания Microsoft Developer Network (MSDN). В тази библиотека могат да се намери

    информация не само за API и MFC , но и много примери.

    Интегрираната развойна среда MS Visual C++ (Integrated Development Environment –

    (IDE)) предоставя:

    - Tекстов редактор за създаване на първичен (source) код на програмите;

    - Средство отстраняване на програмните дефекти (debugger);

    - Kомпилатор и свързващ редактор (linker);

    - Помощна система (Microsoft Developer Network (MSDN));

    - Инструменти за оптимизация на програмния код;

    - Class Wizard средство за създаване и управление на класовете на приложението;

    - AppWizard (AFC) средство за създаване и редактиране на скелетни приложения;

    - библиотеки: Object Link Embedding (OLE), Runtime Libraries (RTL); Active Template

    Library (ATL); *.dll (Dynamic Link Library)

    Файлове, създавани в средата на Microsoft Visual C++

    Средата използва следните папки и файлове:

    При създаване на нов проект се създава папка със същото име като това на

    проекта. Папката, съдържа папка с име Debug и може да съдържа следните типове

    файлове:

    *.dsw – Project Workspace – работна област на проекта;

    *.dps – Project File – проектен файл;

    *a.cpp – C++ source file – файл с първичен код (source) на програмите;

    *.h – header file - файл с първичен код на използваните библиотеки; resource.h –

    съдържа имената на ресурсите;

    *.rc - Resource Template – Файл с шаблон на ресурс;

    ReadMe.txt – Text Document – текстов файл;

    *.asp – ASP File – Active Server Pages

    *.ico ; smal.ico – Icon File – съдържа изображения на иконите на приложението;

    *.ncb – NCB File (Network Control Block) Представя мрежовия контролен блок.

    Съдържа информация за командите на представяне. *.html – HTML Documents

    *.cur - изображение на курсор;

    *.exe – Файл- изпълнимо преместваемо програма – приложение;

    *.dll - динамични програмни библиотеки.

  • Ресурси

    MS Visual C++ предоставя удобни средства за създаване и редактиране на ресурси

    от всички типове. Видове ресурси (предефинирани в Windows, ObjectWindows OWL

    –допълнително по-мощтни ресурси (обекти)): Меню (menu); Таблици с Комбинации

    от клавиши (accelerators); Диалогови кутии (dialogboxes); Шрифтове (fonts); Курсори

    за мишката (cursors); Икони (icons); информация за версията на програмата; HTML –

    WEB страница; Байтови изображения (bitmaps).

    Ресурсите са част от изпълняемата програма, но не се помещават в данновите

    сегменти. Те се зареждат в паметта само когато е необходимо. Ресурсите се

    описват отделно в ресурсен файл с помощта на език за описание на ресурсите.

    При създаване на приложения AppWizard автоматично окомплектова програма

    чрез стандартен набор от ресурси. Те са в компонентата Ресурси (ResourceView) на

    работното пространство ( Workspace) (Фиг.1).

    Създаване и редактиране на различните видове ресурси на едно приложение

    Добавянето на нов ресурс става чрез следните инструкции:

    Позициониране на курсора върху папката с името на ресурсите на приложението -

    win32 resource и натискане на десен бутон. Пада менюто за избор на функция за

    редактиране на ресурсите

    Избираме функция Insert чрез натискане на ляв бутон. Пада менюто Isert resource

    (Фиг.2) за да се избере вида на новия ресурс.

    Редакция на различните видове ресурси:

    1. Accelerators - Таблици с Комбинации от клавиши

    Фиг. 2. Добавяне на ресурс.

    Resource View

    Accelerator

    Dialog

    Icon

    Menu

    String Table

    Фиг. 1. Редакция на ресурси

    (ResourceView )

  • 2. Dialog boxes - Диалогови кутии (Диалогов прозорец)

    Създаването и редактирането на диалоговите кутии използва средства

    групирани в секцията Controls и Dialog Properties.

    3. Icons – Икони. (Фиг. 4) За създаването и редактирането на иконите се

    използват средства за рисуване групирани в секциите Colors и Graphics.

    4. Menu – Меню. (Фиг. 5) За създаването и редактирането на менютата се

    използват Клавишите Insert, Delete и секцията Menu Item Properties.

    5. String Table – Таблица със текстове

    Фиг.6 Редактиране на

    ресурса – таблица със

    текстове

    Фиг. 5 Редактиране на ресурса –

    меню.

    Фиг. 4. Редактиране на

    ресурс –икона.

    Фиг. 3. Редактиране на

    ресурс - диалогов прозорец

  • 6. ToolBar – (Фиг.7) Инструментална лента

    7. BitMap - Байтови изображения (Фиг. 8). За създаването и редактирането на

    изображенията се използват средства за рисуване групирани в секциите

    Colors и Graphics.

    8. Cursor - Курсори за мишката

    Освен традиционните средства за смяна на цвета, избора на начин и размер на

    изобразяване съществува възможност да се определи точка от курсора (pixel),

    HotSpot който ще определя местоположението на мишката. Последователността

    за това е следната: Натиска се бутона HotSpot и после с ляв бутон на мишката

    се посочва точката, която ще определя местоположението на курсора. За

    установяване на курсора може да се използва АРI функцията SetCursor(), като

    ОС обновява курсора всеки път, когато става преместване на мишката. При това

    изображението на курсора се заменя със зададеното при регистрацията на класа

    на прозореца. Един от начините за контрол на формата на курсора се заключава

    в обработката на съобщението WM_SETCURSOR. Формата на курсора се

    установява и в методите CPainterView::OnMouseMove()

    Set

    Hotspot

    Фиг. 9. Създаване

    или редактиране

    на курсор

    Фиг. 7 Редакция на ресурса ToolBar

    Фиг. 8 Редактиране на ресурса

    изображение

  • 9. Version -информация за версията на програмата

    10. HTML – създава се използвайки текстово редактиране и средствата на

    секцията

    Ресурсите се описват във файловете *.RC ->*.RES като се използва език за

    описание на ресурсите.

    В програмния код ресурсите се указват със своя идентификатор. Начинът на

    образуване на идентификаторите на ресурсите е указан по-долу:

    ID{ 1 символ указва вида на ресурса като: M (menu)/ D (dialog)/ I(icon) / A

    (akselerator) / (string table)/…. }_username

    Примери: идентификатор на диалогов прозорец: IDD_ABOUTBOX, идентификатор на

    меню: IDМ_WIN32_8 идентификатор на малка икона: IDI_SMALL.

    Диалогови Елементи (Диалогови Контроли)

    Описание на възможностите на инструментите :

    1. Select –позволява да се кликне върху нещо и да го промените или преместите;

    2. Picture - позволява да се покаже изображение.

    3. Static Text – позволява да се

    въвежда текст, който да се появява

    върху диалоговия прозорец.

    Потребителят не може да промени

    този текст. Използва се за надписи.

    4. Edit Box - позволява да се добави

    към диалоговия прозорец контроли

    за редактиране с цел въвеждане на

    текст.

    5. Group Box – позволява да се постави празно поле около няколко контроли и те да

    образуват група.

    Controls

    1 2 3 4 5 6 7

    1 2 3 4 5 6 7

    Фиг. 11. Лента с инструменти (Controls) на диалоговите

    елементи

    1 2 3 4 5 6 7

    8 9 10 11 12 13 14

    15 16 17 18 19 20 21

    22 23 24 25 26

    Фиг.10 Създаване или

    редактиране на HTML

    страница.

  • 6. Button – позволява да се добави бутон към диалогов прозорец;

    7. Check Box - позволява към диалоговия прозорец да се добави контролно поле. То

    позволява да се определи дали този елемент има или не отметка. Ако има

    няколко такива контролни полета в една група, потребителят може да отметне

    повече от един елемент на групата.

    8. Radio Button - позволява към диалоговия прозорец да добавяте друг вид

    контролен бутон (редио-бутон). Тези бутони се използват когато в даден момент

    само един елемент от групата може да бъде избран. Той позволява да се

    маркира или не, но като единствен избор от дадена група.

    9. Combo Box - позволява да се добави падащ списък към диалогов прозорец.

    Падащите полета са комбинация от контроли за редактиране и списъчни полета.

    Може да се избира или въвежда стойност.

    10. List Box – позволява да добавите списъчно поле към диалогов прозорец.

    Списъчните полета дават на потребителя набор от възможности за избор.

    11. Horizontal Scroll Box – Инструмент – хоризонтален плъзгач.

    12. Vertical Scroll Box - Инструмент – вертикален плъзгач.

    13. Spin Bar

    14. Progress Bar - Инструмент за визуализация на процеси

    15. Slider

    16. Hot Key

    17. List Control

    18. Tree Control

    19. Tab Control

    20. Animate

    21. Rich Edit

    22. Data Time Piker

    23. Month Calendar

    24. IP Address

    25. Custom Control

    26. Extended Combo box

  • Особености на програмирането под Windows

    Под Операционната система Win32 се има предвид 32-разрядните разновидности

    на ОС Windows. Тя предоставя такива възможности , за които преди 10 г. можеше

    само да се мечтае. Основното и различие от предшествениците е въвеждането на

    механизма на „стесняващата се многозадачност” и възможността за пряка

    адресация до 4 Г байта. „Стесняващата се многозадачност” означава, че ОС сама

    решава, на коя от програмите да предостави на разположение процесора. Всяка

    програма (приложение) след като поработи известно време автоматически се

    извежда от системата и управлението се предава на друга задача. Тази организация

    позволява да се създаде илюзията за едновременно изпълнение на няколко

    програми и не допуска ресурсите на компютъра да се ангажират от някоя сбойна

    задача. По този начин системата се предпазва от „зависване”. Втората

    особеност на Win32 е 32-разрядната адресация в пълното виртуално

    пространство, т.е. всяко приложение ( програма на Win32), независимо от това колко

    приложения са стартирани може да се разполага с 4 Г байта ОП. При това

    отделните приложения не могат да повредят данните един на друг, т.к. всяко

    приложение отделя свое адресно пространство. Получавайки на свое разположение

    толкова голям ресурс от памет, програмистите могат да се чустват комфортно.

    Освен отбелязаните особености, може да се отбележи и съществуването на :

    подръжка на ниво процеси и потоци;

    възможност за синхронизация на потоците;

    съществуването на файлове, които са проектируеми в паметта;

    наличие на механизъм за обмен на данните между процесите.

    В Win32 процес се нарича всяка изпълняваща се програма. Всеки процес има

    като минимум един поток на изпълнението. Терминът „поток” (tread) може да се

    определи като логическа посока на на изпълнение на програмата. Ако програмата се

    сравнява с река, то потоците могат да се сравняват с нейни ръкави. Тези потоци

    могат да текат паралелно. Например: когато програмата трябва да изпълни някоя

    продължителна операция е целесъобразно тя да се отдели в отделен поток, като в

    същото време основният поток на програмата може да продължава да общува с

    потребителя. Всички потоци на един процес се ипълняват в едно адресно

    пространство и имат общ код, ресурси и глобални променливи.

    За да могат няколко потока на един процес да не си пречат при използването

    на общи ресурси се прилага синхронизация на потоците.Тя може да потрябва в

    случаите когато един поток трябва да изчака операция от друг поток или ако

  • използват ресурс, които може да обслужи само един от тях. Тъй като потоците се

    изпълняват в стесняваща се многозадачност функцията за тяхната синхронизация

    се изпълнява от операционната среда. За управление на потоците в Windows се

    използват специални флагове, на които е основано действието на няколко

    механизма на синхронизация: светофари (semafores), изключващи светофари

    (mutex), събития (event), критически секции (critical section).

    Всеки процес има възможност за пряка индексация до 4Гбайта, но много по-

    практично е програмите да работят с виртуални адреси, а не с физически. За да

    може ОС да предостави голям обем памет в разположение на приложенията се

    използва специален механизъм на свързване на оперативната памет с твърдия

    диск. Този механизъм се нарича странична организация на паметта (paging). При

    тази организация логическото адресно пространство на всеки процес се разбива на

    отделни блокове, наричани страници. Страниците могат да се разполагат както в

    оперативнта памет така и на твърд диск. ОС оптимизира отделената ОП по такъв

    начин, че процесите да могат да получат бърз достъп до често използваните данни.

    Диспечерът на Виртуалната памет отбелязва отдавна неизползваните страници и ги

    изпраща на твъдия диск.

    Видимо, подобен механизъм се използва и при създаването на файловете,

    проектирани в паметта (memory-mapped files), наричани още отразени файлове.

    Проектираният файл като че ли изобразява файл на диска в диапазона на адресите

    в паметта. Това позволява да се изпълняват операции с файлове точно така както

    ако работата се извършва в паметта. ОС сама организира обмена на данни между

    паметта и диска. Използването на файлове, проектирани в паметта, позволява

    значително да се опрости работата с файлове, а така също дава възможност да се

    разделят данните между процесите. Разделението на данните става по следния

    начин: два или повече процеси създават в своята виртуална памет проекции на една

    и съща физическа област памет – обект „проектиран” файл. ЙКогато един процес

    записва данни в своя „проекционен” файл, то измененията веднага се отразяват и в

    „проекциите”, създадени в други процеси. За организацията на това взаимодействие

    всички процеси са длъжни да използват еднакво име за обекта „проектиран „ файл.

    В Win32 всеки процес има свое адресно пространство, затова

    едновременно изпълняваните приложения не могат случайно да повредят данните

    едно на друго. Обаче често възниква необходимост от обмен на информация между

    процесите. За тази цел в Win32 са предвидени специални способи, позволяващи

  • да се получи съвместен достъп към някакви данни. Всички те са основани на

    механизма на «проектирания» файл.

    Един такъв механизъм се състои в създаването «Пощенска кутия» (mailslot) –

    специална структура в паметта, имитираща файл на твърд диск. Приложенията

    могат да поставят данните си в «кутия» и да ги четат от там. Когато всички

    приложения, работещи с кутията завършат, пощенската кутия се отделя от паметта.

    Друг такъв способ се заключава в организацията на комуникационна

    магистрала – «канал» (pipe), които свързва процесите. Приложение, имащо достъп

    до канала от единия му край, може да се свързва с приложение, което има достъп от

    другия му край и да му предаде данни. Каналът може да отделя на приложенията

    едностранен или двустранен достъп. При едностранния достъп едно приложение

    може да записва данните в даден канал, а друго да ги чете; при двустранния достъп

    и двете приложения могат да изпълняват операции четене/запис. Съществува

    възможност да се организира канал, които комутира едновременно няколко процеса.

    Основните концепции в ОС Windows могат да се формулират като:

    преместваемост на изпълнимите приложения;

    обектна ориентация на програмирането на приложенията.

    Основни Свойства на ОС

    Операционната среда MS-DOS +Windows притежава следните свойства:

    -преносимост на приложенията;

    -управление на оперативната памет и ресурсите;

    - едновременна работа на много приложения;

    - много-прозоречен интерфейс.

    Строеж на средата Windows

    Строежът на средата, нейните

    основните взаимодействащи си

    компоненти са представени в общ план на

    Фиг. 11 и в по-подробен план на Фиг. 12

    чрез схемите на връзките между

    компонентите на операционната среда.

    Хардуер

    Приложения

    Windows

    MS

    -DOS

    Фиг. 11. Общ план на операционната среда

  • На детайлизираната схема са показани:

    Основните хардуерни устройства

    Използвани ресурси на MS- DOS:

    - Файлова система INT21;

    - Драйвери на файловата система на MS-DOS;

    - BIOS функция за управление на дискове и дискети;

    - BIOS функция за управление на печат (паралелен интерфейс).

    Множеството на Windows драйверите, специфични за всяко конкретно

    устройство;

    Основни функции на Windows. Ресурси от операционната система Windows:

    - GDI.EXE за управление на дисплей и мишка;

    - USER.EXE за управление на всички останали устройства, клавиатура и

    мишка;

    - KERNEL.EXE за управление на файлове и ОП.

    Фиг. 13. представя примерна схема на разпределение на ОП и „преместваемостта”

    на приложенията. Показано е, че във фрагментирана Оперативната Памет са

    Windows Windows-драйвери

    Хардуер

    дисплей

    печат

    display.drv

    printer.drv

    Таимер

    Звук

    RS-232

    ….

    .

    .

    клавиатура

    мишка

    оп. памет

    диск. памет

    systim.drv

    sound.drv

    comm.drv

    ….

    .

    .

    keyboard.drv

    mouse.drv

    BIOS Драйвери Файлова система

    GDI.EXE

    USER.EXE

    KERNEL.EXE

    MS-DOS

    Windows приложение

    Фиг. 12. Детайлизирана схема на операционната среда

    Интерфейс хардуер

    Интерфейс драйвери

    Интерфейс Windows

  • заредени един или няколко приложения. Изпълняваните приложения могат да се

    зареждат от различни начални адреси и те да се променят по време на

    изпълнението. (т.е. Приложенията са преместваеми в оперативната памет.

    Фиг. 3. Примерна схема на разпределение на ОП.

    File SWAP

    Фрагментиране на ОП

    Преместваемост на приложенията

    Windows

  • Обектно програмиране в средата на Windows.

    Обектно ориентираното програмиране е основна концепция в Windows.

    Същност и модел на обектите

    Фиг. 14. позволява да се сравнят последователния и обектния модел на обработка

    на данните. Обектния модел организира данните и методи за обработката им в

    понятието „обект” . С буквите „А”, „B”, „C”, „D”, „E” са означени програмни функции, а

    с „X”, „Y”, „Z” структури от данни. Обект 1 включва структура от данни X и

    програмните функции A и B. В лявата част на фигурата е показано структурирането

    на обектите в рамката на класически алгоритъм, а в дясната част структурирането

    по данни. Данните от всеки обект са достъпни само чрез функциите (методите) на

    този обект. Този механизъм се нарича „капсуловане” (затваряне) на обектите.

    Класически алгоритъм Данни Множество Обекти

    А

    В

    C D

    E

    X Y Z

    Обект 1

    X

    А

    В

    Обект 2

    Y

    C

    D

    Обект 3

    Z

    E

    Фиг. 14. Обектен модел на организация на данните

    Фиг. 15. Обмен на съобщения между обектите

    Диспечер на съобщенията

    Обект 1

    X

    А

    Обект 2

    Y

    FIFO

    Съобщения от хардуера /клавиатура, мишка/

    Вх. точки

    Главни функции

    В D

    C

    Данни

    SendMessage()

    Методи –вътрешни

    функции

  • Съобщенията между обектите се осъществяват като:

    Изпълняват се командите към обектите, които съдържат данни;

    Командите определят последователността на изпълнение на функциите;

    Обектите обменят данни само чрез съобщения.

    Механизмът на обмен на съобщения между обектите за разглеждания по-горе

    пример е представен със схемата от Фиг. 15.

    Обекти в Windows могат да съдържат:

    - Структура от данни, която представя описание на обекта като: координати,

    цвят, тип, размер на прозорец и други описателни атрибути );

    - Главна функция която обслужва съобщенията постъпващи към обекта.

    Функцията се прикача към обекта, когато той се инициализира

    (възниква);

    Всички функции имат общ заглавен оператор стандартни параметри и

    кодове на съобщенията;

    Структурата на функцията е от тип: switch(разклонител) по кода на

    съобщението;

    Функцията анализира всяко съобщение и реагира на някои от тях (

    промяна на размера, съдържанието или атрибутите на прозорец)

    - Подчинени функции, към които се обръща главната функция (функции на

    приложението);

    - Стандартни функции на Wndows, които се използват от главната или

    подчинените функции (TextOut, BitBlt,….)

    Събития – съобщения

    Съобщението е кодирано като уникално 32-битово цяло значение. Във файла

    WINDOWS.H за всички съобщения са определени стандартни имена като:

    WM_COMMAND, WM_INITDIALOG, WM_DESTROY WM_CHAR, WM_PAINT,

    WM_MOVE, WM_SIZE, WMLBUTTONDOWN и др. Често съобщенията се

    съпровождат с параметри носещи допълнителна информация (координати на

    курсора, код на натиснатия клавиш и др.) Всеки път когато произтича събитието,

    касаещо програмата ОС и изпраща съответното съобщение. Не е нужно да се

    описва реакцията на всяко съобщение. За съобщенията, които няма специална

    обработка, в MFC – програма се обработват по стандартен начин.

    Структура на съобщенията:

    16бита – код на получателя; 16 бита код на съобщението; 16 бита данни; 32 бита

  • данни. Пример object1.method2(d1,d2)

    Кодът на получателят всъщност е един номер или индекс от 0 до 216, който

    идентифицира всеки обект. Кодът е еквивалентен номер на зает в оперативната

    памет блок за обекта. Това в същност е референция към обект (Манипулатор на

    обект). Кодът на съобщението (номера на съобщението) съответства на вътрешна

    функция метод. Данните 16б. и 32б. са съпровождащи съобщението данни.

    Пример: Ако натиснем ляв бутон на мишката се формира следното съобщение:

    получател:прозоречен обект (активния прозорец); код на съобщението:

    WM_LBUTTONDOWN-това е 16б. число, данни 1: кодиране от клавиатурата; данни2:

    старши 16б. Х, младша 16б. Y координати на мишката. (Координатите могат да се

    заредят в променливите x, y чрез : int x = LOWORD(lParam); int y = HIWORD(lParam);

    Главната обслужваща функция за всеки обект има един и същ формат:

    long WinApi(WndProc(hWnd, hPen, UINT message, Word, wParam, long, lParam)

    {{……където параметрите са: hWnd –прозорци, hPen - писалки, hBrush - четки,

    hFont -шрифтове, hMenu-памет, hBitmap- растерно изображение.

    Обмен на съобщения. Обработка и изпращане на съобщения. Синхронизация.

    Диспечер на съобщенията.

    Фиг16. представя последователността на обработка на съобщения чрез примера за

    събитиет0 (съобщението) „натискане на клавиш от клавиатурата”.

    При изобразяване на обработката на съобщенията са използвани означения с букви

    заградени в квадрат на главните компоненти от едно приложение и модулите на ОС,

    WndProc(

    switch

    c

    2

    keyboard.drv

    клавиатура

    R

    R

    екран

    display.drv

    e

    8

    1

    9

    WinMain

    a

    b

    10

    12

    11

    GDI.EXE

    USER.EXE

    Друго Приложение

    Опашка от съобщения на системата

    Опашка от съобщения на приложението

    3

    4

    5

    6

    7 f

    d

    ПРИЛОЖЕНИЕ WINDOWS

    Фиг. 16. Последователност на обмен на съобщенията

  • а обработките (обмена) са представени със стрелки като последователността е

    означена с поредни номера заграден в кръг.

    Означения на основните компоненти:

    а – главна програма на приложението;

    b – цикъл на обработка - извличане на съобщения WM_CHAR ;

    c – главна функция на прозореца на приложението;

    d – WM_CHAR съобщение от драйвера на клавиатурата към главната функция

    e – прозорец на приложението (активен прозорец – фокус);

    f – извикване на функцията TextOut (GDI – функция).

    Обработки:

    номера от 1 до 9 представят основния цикъл на обработката на съобщенията

    WM_CHAR:

    1 – обръщение от клавиатурата към драйвера на клавиатурата;

    2 – съобщение (Получател=WM_CHAR на активния прозорец(WM_CHAR – съобщения от

    клавиатура));

    3 – разпределяне на опашките;

    4, 5 – извличане на съобщенията WM_CHAR;

    6 – Windows извиква WndProc;

    7- WndProc извежда текст чрез ТextOut;

    8 – обръщение към драйвера на дисплея;

    9 – от драйвера на дисплея към екрана;

    10 – стартиране на приложение – Управлението се предава на WinMain;

    11 – Функции към Windows (RegisterClass, CreateWindow, …) за начално

    установяване;

    12 – завършване на приложението при получаване на съобщението WM_QUIT.

  • Обекти полиморфия и наследяване на обекти в средата на

    Windows. Управление на ресурсите във в средата на Windows.

    Управление на Оперативната памет. Управление на разделяемите

    ресурси.

    Обектно програмиране в средата на Windows

    Основните понятия и принципи на обектно ориентираното програмиране (ООП) са :

    обект, клас, капсулиране (затваряне), наследяване и полиморфизъм.

    Класът се явява обобщение на понятието за тип на данните и задава свойства и

    поведение на обектите на класа , наричани още и екземпляри на класа. Всеки обект

    принадлежи на някои клас. Класът може да се представи като обединение на данни

    и процедури, предназначени за техните обработки. Данните на класа се наричат

    също така и променливи на класа, а процедурите –методи на класа. Всеки клас

    съдържа данни и методи.

    Капсулирането (затваряне) на класовете е обработката на данните чрез

    методите на класа. В С++ променливите на класа се наричат данни-членове на

    класа (data member), а метод ите – функция-член на класа (member function).

    Променливите определят свойствата или състоянието на обекта. Методите

    определят поведението на обекта.

    Наследяване на свойства и поведение от родителския клас. Нека е определен клас

    А, тогава може да се определи нов клас В, наследяващ свойствата и поведението на

    обектите от клас А. Това означава, че в класа В ще бъдат определени променливи и

    методи от клас А. Класът В се явява породен от клас А. Класът А се явява

    родителски (базов) по отношение на В. В производен клас може да се зададат нови

    свойства и поведение, определяйки нови променливи и методи. Може да се пре-

    определят методите на базовия клас. Пре-определянето (overloading) на

    методите на клас А – това е е определяне в клас В на метод с име, вече появило се

    като име на някой метод от клас А. Методът на базовия клас може да се обяви като

    виртуален (с атрибут virtual). Тогава при пре-определянето на метода в производен

    клас трябва да се съхранява броя на параметрите на метода и техните типове.

    Виртуалността обезпечава възможност за написване на полиморфни функции,

    чиито аргументи могат да имат различни типове (класове) при различни обръщения

    към функциите и при това ще изпълняват действия, специфични за типа на

    фактически предадения аргумент. Например, нека в клас А е определен виртуален

  • метод VirtualMethod(), който издава съобщението „Аз съм метод от клас А”. Нека да

    пре-определим метода в класа, така че да издава съобщение „ Аз съм метод-член на

    клас В”. Тогава следва пре - определяне от вида:

    class A // Определяне на клас А

    {

    public:

    // Виртуален метод на класа А

    virtua void VirtualMethod() {Издава съобщение „Aз съм метод на клас А”}

    }

    // Определяне на клас В

    class B: public A

    { public:

    // Виртуален метод на класа B

    virtua void VirtualMethod() {Издава съобщение „Aз съм метод на клас B”}

    }

    // Полиморфна функция. !!!! В качеството на аргумент тя приема указател

    // към клас А, които е базов за В

    void ShowMessage(A* x)

    {

    // Извикване на метода на обекта VirtualMethod() x

    x->VirtualMethod();

    }

    // Създаване на ОбектА на класа А

    A ObjectA;

    // Създаване на ОбектB на класа B

    B ObjectB;

    // Извикваме полиморфна функция с аргумент – указател към обект от клас А

    // Ще се изведе съобщението: „Аз съм метход на клас А”

    ShowMessage(&ObjectA)

    // Извикваме полиморфна функция с аргумент – указател към обект от клас В

    // Ще се изведе съобщението: „Аз съм метход на клас В”

    ShowMessage(&ObjectВ)

    Класът В може да е базов за следващ клас и.т.н. Всички породени класове се

    наричат наследници, а класовете от които са породени се наричат предци или

    родители.

  • Определянето на класовете (интерфейс на класовете) се намира в заглавните

    файлове *.h, а реализацията на функциите на класовете се намира в едноименния

    файл с разширение *.cpp. Тази организация структурира изходния текст, облекчава

    управлението на данните и позволява да се раздели компилацията на модулите на

    програмата.

    Наследяване на свойства в Windows

    Наследяването е свойство на обектите подредени в йерархия, което

    позволява чрез йерархия от класове, общите свойства да се изведат на по-високо

    ниво в йерархията. В Операционните системи наследяването има динамичен

    характер.

    Йерархичната структура на обектите се характеризира с подреждане на обектите

    в нива така че всеки обект да има 1 предшественик, ако не е корен и да има

    наследници, ако не е листо. Основният принцип на наследяването е, че всички

    наследници наследяват данните и обслужващите функции на предшественика си.

    Всички наследници се явяват инстанции (конкретизации) на предшественика.

    Всички предшественици се явяват обобщения на наследниците си.

    Предшествениците са чисто абстрактни класове и съдържат празни методи.

    Методите на наследника могат да припокриват методите на предшественика.

    Полиморфията е свойство на обектите да реализират определена

    абстрактна функционалност по свой специфичен начин и налага

    използването на стандартизирани методи. Напр. Инстанциране и изтриване

    на обекти. ……Ref=new_class_Name води до инстанциране в heap (таблица със

    входните точки - стартовите адреси на методите).

    Следват примери на йерархично изградени обектни структури:

    Пример: 1

    Пример 2

    Следващия пример представя наследяването в Windows чрез регистрация на

    класове при създаване на прозорци, което става по време на изпълнението на

    приложението.

    кораб товарен кораб танкер

    Position typedef struct{

    int x;

    int y;

    } Position;

    Point typedef struct{

    Position:koord;

    int: color;

    } Point;

    Line typedef struct{

    Point: P1;

    Point: P2;

    char:LineType;

    } Line;

  • Rеgister Class (...) //обект със свойства за определен тип прозорци)

    ……………..

    CreateWindows (…..) - //собствени свойства

    Полиморфия в Windows. Полиморфията е свойство на обектите да

    реализират определена абстрактна функционалност по свой специфичен

    начин. Тези функци са полиморфни на абстрактната функционалност и

    представляват нейните конкретизации. Това означава:

    Стандартизиране на управлението на множество обекти;

    Въвеждане на номенклатура на методите;

    Унификация на обектите.

    Полиморфията се постига чрез препокриване на абстрактни обекти и методи.

    Полиморфия при методите Нека като абстрактна функционалност е използван

    абстрактен метод като Move(Id,x,y), който премества визуален обект в прозорец на

    нова позиция с нови координати. Съответните му полиморфни функции (методи),

    които биха могли да го препокрият са: преместване на векторен обект (линия,

    квадрат); преместване на растерен обект – bitmap; снимка или преместване на

    текстов обект –низ.

    Полиморфизмът се реализира чрез програмиране на специфични (подчинени)

    функции, които се активизират от различните главни функции на обектите за

    обработка на едно и също съобщение: Напр. Съобщението WM_PAINT предизвиква

    пречертаването на всички прозорци, към които се изпраща, а върху различните

    прозорци може да са изобразени различни графични или текстови обекти. Такъв е

    случаят когато се промени размерът на някои от прозорците на екрана.

    Подходящ пример за преопределяне на методите на класовете е приложение

    където функцията за изобразяване на вкторен обект се преопределя по два

    различни начина.

    В базовия клас „Shape” функцията-метод е определена само като (virtual void

    Draw(HDC hdc)) В двата класа наследници (class Line, class Rect) тя се преопределя по

    два различни начин, съответно да изобрази линия или правоъгълник.

    enum shpType { line, rect }; // class Shape { public: POINTS begin;

  • POINTS end; Shape() {}; ~Shape() {}; Shape(const Shape& s) { begin = s.begin; end = s.end; } Shape& operator=(const Shape& s) { begin = s.begin; end = s.end; return *this; } virtual void Draw(HDC hdc) { assert(FALSE); }; }; class Line : public Shape { public: virtual void Draw(HDC hdc) { MoveToEx(hdc, begin.x, begin.y, (LPPOINT) NULL); LineTo(hdc, end.x, end.y); } }; class Rect : public Shape { public: virtual void Draw(HDC hdc) { Rectangle(hdc, begin.x, begin.y, end.x, end.y); } };

    Полиморфия при съобщенията:

    Често използвани стандартни съобщения:

    1. WM_INITDIALOG – един път при създаване на прозорец; начално

    инициализиране на данни; отваряне на файлове; заемане на оперативната

    памет; инстанциране на обекти.

    2. WM_CLOSE – при затваряне на процеса;

    3. WM_QUIT – затваря приложение;

    4. WM_CHAR – съобщения от клавиатура (натиснат е клавиш);

    5. WM_LBUTTONDOWN(UP) съобщения от мишката за натискане на ляв бутон

    (захват);

    6. WM_RBUTTONDOWN(UP) съобщения от мишката за натискане на десен

  • бутон (захват)

    7. WM_MOUSEMOVE съобщения от мишката за преместване на обект

    (влачене, пречертаване);

    8. WM_SIZE - съобщения при промяна размера на прозореца;

    9. WM_PAINT – съобщение изпращано при изрисуване на главния прозорец,

    обработвано от UpdateWindow;

    10. WM_DESTROY – съобщение за разрушаване на децата на главния

    прозорец;

    11. WM_COMMAND – съобщение за въведена команда от меню или диалогов

    кутия;

    12. WM_CREATE – съобщение за създаване на обект;

    Пример: В един прозорец би могло да има следните съобщения: Подготовка на

    съдържанието на диалогова кутия с WM_INITDIALOG, извеждане на изображение

    на главния прозорец с WM_PAINT, команди въведени от менуто или диалогов

    прозорец с WM_COMMAND и затваряне на приложението с WM_DESTROY.

    Управление на ресурсите

    Ресурсите за приложенията под Windows биват хардуерни и софтуерни

    компютърани ресурси. Хардуерните ресурси са: дисплей, принтер, клавиатура,

    мишка, RS232, таймер, звукова карта, оперативна памет, дискова памет, процесор.

    Софтуерните ресурси са програмите на ОС, програмните среди, библиотеките,

    потребителските приложения.

    Мултипрограмна работа под Windows

    Под Windows могат да бъдат стартирани много приложения едновременно;

    Управлението се превключва между тях по събитие по програмен път;

    От потребителя (ALT-TAB), чрез меню, чрез преместване на фокуса на

    мишката;

    програмно чрез функции на Windows;

    Превключването на приложенията не се извършва чрез времеделение (time sling)

    по сигнал от таймера.

    Разпределение на ресурсите

    Чрез функциите на Windows се заемат и освобождават ресурси.

    Изключително се заемат ресурсите като взаимно се изключват за определен

    период (звуков генератор, процесор, принтер, клавиатура RS232).

    Разделено използване на ресурсите се постига като взаимно изключва част от

    ресурсите като: дисплей, мишка, таймер, ОП, дискова памет.

  • Паралелно се използват ресурси като: файлова система.

    Управление на дисплея – извършва се чрез прозорци. Основеният елемент е

    фокусът на прозорец т.е. от всички отворени прозорци само един има фокус.

    Растерното картина на дисплея се постига като в клетките на памета се кодира по

    специален начин описанието на всяка клетка (пиксел) от изображението. В

    съответствие с размерите на растера за съответния графичен режим (брой пиксели

    в хоризонтална и жертикална посока) се съхранява описание на цвета на

    засветяване на жсеки пиксел. В най младшата клетка на паметта се съхранява

    информация за клетката с координати (0,0). За кодиране на цветовете в пикселите

    (точки) на дисплея има различни варианти на дължина на кода, определени от

    използвания цветови модел.

    Цветови модели

    За описание на цветовете се използват различни математически системи,

    наречени цветови модели или цветови пространства. То се дефинира като

    едно-, две-, три- или четири мерно пространство, чиито компоненти, представляват

    стойностите на интензивността на цветно представените пиксели. Цветовият модел

    позволява освен да се използват предимствата на математическата обработка на

    количествено изразени цветове, така и да се визуализират предполагаемите

    пространствени връзки между тях. Отделните модели са свързани помежду си с

    елементарни математически зависимости. Най-използваните цветови модели са

    няколко:

    Черно –белите (бинарни) изображения съдържат само два цвятата цвята (черно и

    бяло).

    Модел на сивото има само един компонент, който се изменя от черно до бяло

    (Фиг.18.). Използва се в черно-бели монитори и принтери.

    Адресно пространство

    Windows

    …………

    Application

    Picture memory Video Controler display

    Фиг. 17. Управление на дисплея

    VC

    Memory

  • Модел RGB (Red-Green-Blue) е тримерен, като компонентите му са трите основни

    цвята - червен, зелен и син, използвани във всички дисплеи. Диагоналната линия

    между началото на координатната система и точката на бялото представлява сивия

    цвят във всички негови нюанси (Фиг.19).

    RGB е пълно цветови модел. Или

    всички други пълни цветови модели

    могат да се получат от него чрез

    трансформиране, въобще нелинейно.

    Инверсния вариант на RGB е моделът

    CMY, прилаган в принтерите.

    Модел CMYК (Can, Magenta, Yellow)Тази се използва в печатарската

    индустрия.Основните цветове в CMYK са циан, маджента, жълто и черно, а

    червеното, зеленото и синьото са вторичните .

    Модели HSV, HLS, HISHSV (Hue, Saturation, Value), HLS (Hue, Luminance, Saturation)

    HIS (Hue, Saturation, Intensity) са три варианта на реално един и същ цветови модел

    (Фиг. 1.5). Реално те са едно RGB пространство, но завъртяно така, че неутралния

    диагонал да стане координатна ос за осветеност, наситеността е разстоянието от

    централната координатна ос и цветността – положението около центъра. Разликата

    между тези цветови пространства е в измерването на наситеността или силата на

    цвета.В HSV, наситеността има максимална стойност 0, когато осветеността е 0 и

    стойност 1, когато осветеността е 1. В HLS наситеността има най-висока стойност при

    осветеност 0.5 и стойност 0 за бялото и черното. В действителност HLS е идентична

    с HSV, но с различно име.

    В Моделна Система цветове на Munsell всеки цвят има три атрибута: цвят или

    нюанс, стойност и сила или качество. За означаване на тези атрибути се използват

    символите H,V и C (съкратено H V/C).Цветът (Hue) е атрибут, даващ възможност да

    Фиг.18

    Фиг. 19

  • се различи един цвят от друг – червен от зелен, син от жълт и т.н. Стойността (Value)

    – определя осветеността на цвета, или отделянето на светлите от тъмните цветове.

    Цифровите стойности са от 0 за абсолютно черно до 10 за бяло.

    Варианти на дължината на описанието на цвета на засветяване на всеки

    пиксел:

    1 бит/ точка за черно-бяло изображение;

    4 бита/ точка за изображение от 16 цвята;

    8 бита, 1 байт/ точка за изображение от 256 цвята;

    2 байта/ точка за 65000цвята и

    4 байта/ точка за 4. 106цвята.

    Възможно е за всяка точка от паметта да се кодира само по един номер-код на

    нейния цвят или по 3 числа в интервала 0-255, с който се постига кодиране на

    интензивността на пикселите с три основни компоненти на цветовия модел. В случая

    на на RGB цветовия модел това са три числа съответсващи, съответно на

    компонентите : червено, зелено и синьо. В Windows има фукции за синтезиране на

    цвят според различни цветови модели. В примерите на изучавания език цвят се

    указва по следния начин: 3 компоненти за модела RGB(R,G,B):

    сиво- RGB(127,127,127) –сиво, червено - RGB(255,0,0), white -RGB(255,255,255),

    yellow - RGB(255,255, 0), brown - RGB(255,200,100) шестнадесеттично зададен код

    на компонентите – жълто - RGB(0xFF,0xFF,0x00), розово - RGB(0xFF,0x66, 0xEF),

    RGB(255,102, 228).

    Обслужващата функция на всеки прозорец се занимава с неговата регенерация в

    реално време (UpdateWindow(hWnd)).

    Управление на оперативната памет

    В MS-Dos: Всички сегментни адреси на изпълнимите файлове след тяхното

    зареждане в ОП са постоянни, или приложенията са „ не-преместваеми”.

    Изпълнимият файл не може да е по-голям от свободната част на ОП и е позволена

    работа и с физически адреси.

    В Windows: Тук има нов механизъм за управление на паметта, които позволява:

    възможност за преместване на сегменти в паметта;

    уплътняване на заетата памет след освобождаване, получаване на

    максимално свободни пространства;

    възможност за частично зареждане на големи *.ЕХЕ;

    възможност за временно съхраняване на неактивни сегменти в системен

    файл (swap –file);

  • възможност за странична организация на паметта и използване на разширена

    (extended)памет.

    Примерна схема на разпределение на ОП в три различни момента, означени с а/ b /

    и c/ от изпълнението на 4 приложения A, B, C, D е представена на Фиг. 20. В

    първия момент а/ са активни 3 приложения; във втория момент е активно само

    приложение А и има ново приложение D. Приложение D е завършило, a

    приложението B е неактивно приложение. Показано е как се обединява

    максималното свободно пространство. Ако макималното свободно пространство не

    е достатъчно, то се прави запис в файл за временно съхраняване. В третия момент

    е показано разпределението на ОП след завършване на работата на приложения А

    и С.

    За да се реализират тези възможности на операционната система за управление на

    ОП се налага специфициране на информация за това кои сегменти са преместваеми

    и кои могат да се съхраняват временно на файл ( указва се в *. DEF файл). Работи

    се с виртуални адреси чрез описатели (дескриптори) вместо с физически адреси.

    Библиотека MFC (Microsoft Foundation Class Library)

    Библиотека MFC е базов набор от класове, написани на езика С++ и са

    предназначени за програмиране под Windows. Библиотеката представлява йерархия

    от класове на много нива с около 200 члена и обезпечава създаването на

    приложения на основата обектно-ориентирания подход. Достойнствата на MFC е в

    това, че използването на нейни те класове позволява да се избегне голяма част

    рутинна работа. Програмирането значително се улеснява, капсулирайки функциите

    на АРI с класовете от MFC. Интерфейсът, обезпечаван от библиотеката,

    практически не зависи от детайлите, които го реализират. Затова програмите,

    A B A D A a/

    A A A C b/

    B c/

    Фиг. 20. Илюстрация на механизма за управление на паметта в три

    последователни момента а/ в/ с/.

  • написани на основата на MFC, могат лесно да се адаптират за нови версии на

    Windows. MFC дава скелета, на чиято основа може да се създаде програма под

    Windows. Както всички приложения имат фиксирана структура, определена от

    WinMain(), така и приложенията създадени на основата на MFC са твърдо

    зададени.

    Имената на класовете на библиотеката MFC започват с „C”, а имената на

    променливите от класа с „m_”. В най-простия случай на програма, написана с

    използването на MFC, се съдържат 2 класа : класа предназначен за създаване на

    приложението и класа за създаването на прозорец. Първият (CApp) се поражда от

    класа CWinApp на библиотеката MFC, вторият обект (CMainWin) се поражда от

    CFrameWnd. Ядрото на MFC- приложенията глобалния обект theApp от класа

    CApp, отговаря за създаването на всички останали обекти и обработка на опашка от

    съобщения.

    Създаването на MFC- програма включва следните действия:

    От CFrameWnd да се породи клас, определящ прозорец- клас CMainWin .

    От CWinApp да се породи клас, определящ приложението – CАpp.

    Да се създаде карта на съобщенията.

    Да се пре-определи функцията InitInstance() на класа CWinApp.

    Да се създаде екземпляр от класа, определящ приложението – обекта theApp.

    Примерен Листинг на минимална програма създадена на основата на класа

    библиотеки MFC.

    #include // Определение на основните класове // Клас за главния прозорец class CMainWin: public CFrameWnd { public: CMainWin(); DECLARE_MESSAGE_MAP() }; // Комструктор за прозорец CMainWin:: CMainWin() { Create(NULL, “Основа MFC приложение” } // Клас за създаването на приложението class CApp: public CWinApp { public: BOOL initInstance(); }; // Функция за инициализация на приложението :BOOL CApp:: initInstance() {

  • // Създаване на обекта – главен прозорец m_pMainWnd=new CMainWin; // Изобразяване на прозорец m_pMainWnd->ShowWindow(m_nCmdShow); // Прерисуване на прозорец m_pMainWnd->UpdateWindow(); } // Карта на съобщенията на приложенията BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd) END_MESSAGE_MAP() ////////////////////// // Начало на изпълнението на приложението // Създаване на глобален обект – приложение cApp theApp; /////////////////////

    Текстът на програмата включва файла AFXWIN.H, който съдържа описание на

    класовете на библиотеката MFC и други библиотечни файлове.

    Приложението се изпълнява когато се създава екземпляр от класа CАpp – обектът

    theApp. Породения клас CMainWin съдържа 2 члена: конструктор CMainWin() и

    макрос DECLARE_MESSAGE_MAP(), в който е обявена карта за обработка на

    съобщенията за класа CMainWin. Двойката команди

    BEGIN_MESSAAGE_MAP(CMainWin, CFrameWnd) и END_MESSAGE_MAP()

    заграждат картата на съобщенията на главния прозорец, като между тях трябва да

    се намира извикването на функцията за обработка на постъпващите съобщения. В

    примера не се обработват съобщения.

    Обработка на съобщения

    Съобщението е уникално 32-битово цяло значение. Във файла WINDOWS.H за

    всички съобщения са определени стандартни имена като WM_CHAR, WM_PAINT,

    WM_MOVE, WM_SIZE, WMLBUTTONDOWN и др. Често съобщенията се

    съпровождат с параметри носещи допълнителна информация (координати на

    курсора, код на натиснатия клавиш и др.) Всеки път когато произтича събитието,

    касаещо програмата ОС и изпраща съответното съобщение. Не е нужно да се

    описва реакцията на всяко съобщение. За съобщенията, които няма специална

    обработка, в MFC – програма се обработват по стандартен начин.

    MFC съдържа преопределящи функции – обработващи съобщенията, които могат да

    се използват в програмата. За организацията на обработката на съобщенията е

    необходимо да се изпълнят следните действия:

    - Да се включат макрокомандите на съобщенията в картата на съобщенията на

    програмата;

  • - Да се включи в описанието на класа - прототип на функцията-обработчик на

    съобщението.

    - Да се включи в програмата реализацията на функцията-обработчик.

    Макрокомандите обезпечават извикване на функциите-обработчищи на

    стандартните съобщения на Windows. Имената на макрокомандите се състоят от

    префикса ON_, името на съобщението и двойка кръгли скоби. Например:

    ON_WM_LBUTTONDOWN(),ON_WM_LBUTTONUP(), ON_WM_PAINT. Предвижда се

    специална макрокоманда ON_COMMAND(), предназначенаа за съобщения, които

    постъпват при извикване на пунктове от меню, и съобщение определено от

    програмиста. Тази макрокоманда има два аргумента: ON_COMMAND(ID,

    METHODNAME), като първият аргумент – идентификатор на пункта от менюто или

    съобщението, определено от програмиста, а втория е името на функцията-

    обработчик на съобщението.

    Макрокомандата на съобщението се намира в картата на съобщения на прозореца.

    Картата на съобщенията е специален механизъм, който свързва идентификатора на

    съобщения със съответния обработчик. Едно приложение може да има няколко

    карти на съобщенията. Принадлежността на картата към някои прозорец се

    определя от параметъра на макроса BEGIN_MESSAGE_MAP():

    BEGIN_MESSAGE_MAP(клас на прозореца-притежател, базов кклас)

    // макрокоманди на съ