Microsoft Foundation Class Library
Microsoft Foundation Class Library (Microsoft Foundation Classes nebo MFC), vedením Microsoftu označována jako „Nové Windows API“,[1] je knihovna, která zapouzdřuje (zabaluje) většinu funkcí Windows API a uspořádává je do hierarchicky odstupňovaných C++ tříd, které zajišťují použití a plnou kompatibilitu s většinou platforem OS Windows. Třídy spravují většinu objektů ve Windows a tedy předdefinovávají například okna nebo kontrolní panely.
Vývojář | Microsoft |
---|---|
Typ softwaru | Widget toolkit |
Web | docs |
Některá data mohou pocházet z datové položky. |
Historie
Knihovna MFC byla poprvé představena v roce 1992 společně s kompilátorem C/C++ 7.0 pro 16bitové verze OS Windows. Jazyk C byl postupem času nahrazen C++ pro vývoj komerčního software a C/C++ 7.0 byl první kompilátor společnosti Microsoft, který C++ podporoval.
MFC 2.0 byla obsažena ve Visual C++ 1.0 z února 1993.
MFC používá Afx jako předponu mnoha funkcí, maker a standardních předkompilovaných hlavičkových souborů (např. stdafx.h). Během krátkého období se knihovna MFC stala populární a mnoho programátorů jí začalo zařazovat jako Application Framework Extensions (Rozšíření pracovního prostředí) neboli ve zkratce AFX. Avšak název Microsoft Foundation Class (MFC) byl přijat později, a proto nepronikl do názvů funkcí, maker a hlavičkových souborů. Knihovna je jednou z nejrozšířenějších a nejznámějších knihoven pro vytváření grafického rozhraní v OS Windows. Je psána jazykem C++. Implementuje mnoho funkcí Windows 32 API.
Knihovna MFC 8.0 byla vydána společně s Visual Studiem 2005. MFC není součástí volné Visual C++ 2005 Express edice.
Object Windows Library (OWL) je navržena pro Borland kompilátor Turbo C++ a byla představena společností Borland ve stejné době. Borland dokonce přestal vyvíjet OWL a uvalil licenci na kolekci hlavičkových souborů MFC, knihoven a .dll souborů. I když byla tato licence po krátké době zrušena, MFC přestala plně podporovat OWL. Borland proto později vydal VCL (Visual Component Library), aby opravil nekompatibilitu.
Význam MFC byl ovšem oslaben s příchodem .NET Framework. Alternativou k MFC je Windows Template Library (WTL). Kompilátor Visual C++ Express dokáže zkompilovat MFC aplikace, avšak nezahrnuje podporu IDE profesionálních edicí.
Vlastnosti
Když se na trhu objevila knihovna MFC, byla programátory Windows API uvítána především proto, že poskytovala rozmanitou sadu tříd, které v podstatě zabalují složitou procedurální architekturu WinAPI. Pro složité operace (jako např. Message Maps) bylo MFC vybaveno množstvím maker, která skrývají obtížnou funkcionalitu do jednoduchých definic. Struktura MFC je za pomocí maker optimalizována pro výkon (zejména díky mapám zpráv, které odlehčují definice tříd, napojených na mapování, o množství virtuálních funkcí, které daná třída zrovna nevyužije).
Pro urychlení vývoje MFC aplikací byly mnohé stěžejní třídy doplněny o funkcionalitu vyšší úrovně, s jejíž pomocí lze s jednoduchostí, nesrovnatelnou s přímým užitím WinAPI funkcí, provádět často užívané a žádané činnosti, jako je např. tvorba uživatelských nabídek a nástrojových lišt, dialogů apod. MFC také poskytlo sadu šablonových tříd pro správu kolekcí, řetězců, vstupu a výstupu apod., což v době, kdy ještě nebyla vyvinutá knihovna STL, vzbudilo velký zájem vývojářů.
Zavedení knihovny MFC ve své době představuje přínos především v rychlosti vývoje a v oblasti stability aplikací. Ač již byl tento produkt překonaný, díky svému někdejšímu rozšíření je stále aktivně používaný.
Chyby
MFC je spojena s vysokou kompatibilitou v rámci OS Windows. MFC je dynamicky se rozšiřující knihovna, která jako jediná je udržována přímo výrobcem OS Windows firmou Microsoft. Proto pokud je nějaký program napsán např. pro Windows NT a vyšší, téměř jistě se vyskytne mnoho problémů při zprovoznění na Windows 98 a nižší. Důvodem je postupné doplňování obslužných maker a rutin MFC. Dalším důvodem je mnoho chyb přímo v operačních systémech Windows. Příkladem může být chyba v práci s bity ve Windows 98, kterou je třeba brát v úvahu při práci se soubory.
Třídy
Mnohé třídy MFC tvoří objektově orientované „balení“ pro velmi podobné datové struktury z Windows API, přičemž ze svých členských funkcí volají nativní funkce Windows API.
MFC třídy a jimi obalené Windows API struktury
- CFile → HFILE
- CRect → LPRECT
- CWnd → HWND
Mnoho tříd však tvoří zcela novou úroveň, shrnují množství sourodé funkcionality a poskytují ve své implementaci metody pro tvorbu kostry okenní aplikace základní a zásadní. První třídou, na níž padne zrak, je zcela právem třída CWinApp. Tato třída přináší MFC implementaci zpracování zpráv (tzv. Message Loop), čímž vývojářům ušetřila nelehký úkol tvorby vlastního zpracování. Propracovaná konstrukce v duchu OOP pak umožňuje řízení a distribuci zpracovaných zpráv do všech dílčích oken aplikace.
Názvosloví
MFC zavádí pro své vývojáře také sjednocené názvosloví. Stručný souhrn základních pravidel pro názvy:
- Název třídy začíná velkým „C“ (od slova „class“), následuje název třídy (jeho první písmeno opět velké), např. CDialog
- Název proměnné začíná zkratkou, definující typ proměnné, např. p pro pointer (ukazatel), sz pro char*, b pro bool
- Název členské proměnné v třídě začíná prefixem m_, např. m_pNextItem
Verze
Verze produktu | Verze .NETu | MFC verze |
---|---|---|
Microsoft C/C++ 7.0 | MFC 1.0 | |
Visual C++ 1.0 | MFC 2.0 | |
Visual C++ 1.5 | MFC 2.5 | |
Visual C++ 2.0 | MFC 3.0 | |
Visual C++ 2.1 | MFC 3.1 | |
Visual C++ 2.2 | MFC 3.2 | |
Visual C++ 4.0 | MFC 4.0 (mfc40.dll zahrnuta ve Windows 95) | |
Visual C++ 4.1 | MFC 4.1 | |
Visual C++ 4.2 | MFC 4.2 (mfc42.dll zahrnuta ve Windows 98 – 1. edice) | |
Pocket PC Embedded 3.0 | MFC 4.2 (mfc42.dll) | |
Visual C++ 5.0 | MFC 4.21 (mfc42.dll) | |
Visual C++ 6.0 | MFC 6.0 (mfc42.dll) | |
Pocket PC Embedded 4.0 | ||
Visual C++ .NET 2002 | 1.0 | MFC 7.0 (mfc70.dll) |
Visual C++ .NET 2003 | 1.1 | MFC 7.1 (mfc71.dll) |
Visual C++ 2005 | 2.0 | MFC 8.0 (mfc80.dll) |
Visual C++ 2005 Express | 2.0 | – |
Visual C++ 2008 | 3.5 | MFC 9.0 (mfc90.dll) |
Visual C++ 2010 | 4.0 | MFC 10.0 (mfc100.dll) |
Visual C++ 2012 | 4.5 | MFC 11.0 (mfc110.dll) |
Visual C++ 2013 | 4.5.1 4.5.2 |
MFC 12.0 (mfc120.dll) |
Visual C++ 2015 | 4.6 4.6.1 |
MFC 14.0 (mfc140.dll) |
Odkazy
Reference
V tomto článku byl použit překlad textu z článku Microsoft Foundation Class Library na anglické Wikipedii.
- Mark Andrews. Programujeme v jazyce Visual C++. Příprava vydání Martina Mojzesová; překlad Pavel Kočička, Jan Bednařík; ilustrace Pavel Kočička, Jan Bednařík. 1. vyd. Praha: Computer Press, 1997. 387 s. ISBN 80-85896-91-5. Kapitola Představuje se Visual C++, s. 10, 17. (česky) Obsahuje bibliografii a rejstřík.