MFC

Ten artykuł dotyczy pojęcia informatycznego. Zobacz też: MFC w mikrobiologii.
Microsoft Foundation Class Library
Logo Microsoft Foundation Class Library
Logo programu
Autor Microsoft
Pierwsze wydanie 1992 – 32 lat temu
Aktualna wersja stabilna 14.22.27821.0 – 24 lipca 2019; ponad 4 lata temu[1]
Język programowania C++
System operacyjny Microsoft Windows
Licencja zamknięte oprogramowanie
Strona internetowa

MFC (skrótowiec od ang. Microsoft Foundation Class Library) – biblioteka Visual C++, której klasy stanowią szkielet aplikacji dla programów pracujących w systemie Windows. Jest to biblioteka programistyczna napisana w języku C++, która stanowi obiektową (i uproszczoną) wersję Microsoft Windows API.

Historia

  • MFC powstała w 1992[2], razem z pojawieniem się Visual C++ 1.0. Od wersji 3.0 jest biblioteką 32-bitową; poprzednie wersje (1.0–2.5) były 16-bitowe.
  • Ze względu na szybko zmieniające się wersje biblioteki, Microsoft zdecydował od wersji 4.2 wprowadzić zgodność ze wszystkimi kolejnymi wersjami. Od tego czasu uaktualnienia biblioteki skompilowane są w pliku MFC(xx).dll(gdzie xx to wersja biblioteki).
  • Typowe funkcje używane przez VC++ zawarte są w bibliotece MSVCRT.dll, nie są to jednak funkcje biblioteki MFC, co jest często mylone, gdyż obydwa pliki są potrzebne do prawidłowego działania aplikacji korzystających z MFC

Elementy charakterystyczne

  • Architektura dokument/widok – technika programowania polegająca na rozdzieleniu interfejsu użytkownika oraz danych programu. Opanowanie techniki i implementacji architektury dokument/widok pozwala tworzyć przejrzyste aplikacje oraz pielęgnować wygląd aplikacji.
  • Kolekcje – biblioteka MFC udostępnia różnego rodzaju kolekcje, podobne do tych z STL:
    • CArray
    • CMap
    • CList (CObList ...)
    • CStringList
  • Serializacja – funkcja umożliwiająca zapisywanie w łatwy sposób całych obiektów do plików, lub do urządzeń (np. drukarki).

Cechy budowy biblioteki

Biblioteka MFC jest stworzona w stylu obiektowym bardzo przypominającym zwyczaje panujące w bibliotekach języka Smalltalk. Stąd wynika np. istnienie „głównego korzenia” w postaci klasy CObject, obowiązek stosowania wyłącznie pojedynczego dziedziczenia, jak również częstego jawnego rzutowania wskaźników na obiekty wynikającego z konieczności obejścia statycznej typizacji, która przeszkadza w pełnej obiektowości, jaką mamy w Smalltalku.

Biblioteka MFC stosuje wiele obejść względem istniejącego sposobu operowania obiektami w C++, m.in. własne mechanizmy tworzenia obiektów oraz własne mechanizmy refleksji (za pomocą specjalnych makr umieszczanych w klasach). Nie stosuje również w ogóle obiektów automatycznych (tworzonych na stosie).

W kwestii tworzenia GUI, biblioteka MFC nie oferuje nam żadnego mechanizmu rozmieszczania widżetów poza podstawowym umieszczaniem widżetu na określonej pozycji w oknie (z tego względu zwykle okna specjalnie dla MFC i WinAPI konstruuje się za pomocą odpowiednich narzędzi i zapisuje w tzw. pliku zasobów, który potem kompiluje się wraz z całym projektem i potem do utworzenia okna stosuje się jedynie identyfikator zasobu). Co za tym idzie, nie ma również możliwości stosowania w poszczególnych widżetach własnej polityki rozmiaru inaczej niż po prostu przez obsługiwanie zdarzenia WM_SIZE.

W MFC istnieje jeden mechanizm obsługi zdarzeń, który w istocie jest jedynie lekko ulepszoną metodą znaną z WinAPI – konstruowana jest tablica zdarzeń określonego okna, czyli lista asocjacji pomiędzy identyfikatorem zdarzenia systemu Windows i funkcją obsługi. Wszystko, co można w tych zdarzeniach określić i obsłużyć, jest ściśle określone tym, co w tej dziedzinie można uzyskać w czystym WinAPI. Tablicę tę tworzy się za pomocą odpowiednich makr, przy czym MFC dodatkowo narzuca nazewnictwo funkcji obsługi zdarzeń.

Przypisy

  1. Visual Studio 2019 version 16.11 Release Notes [online], Microsoft Learn, 13 czerwca 2023 [dostęp 2023-07-30]  (ang.).
  2. Programming Windows Forms with Managed Extensions for C++.
  • p
  • d
  • e
Biblioteki graficzne
Niskopoziomowe
  • Macintosh Toolbox/Carbon
  • Intrinsics
  • Intuition
  • Windows API
  • Xlib
  • XCB
Wysokopoziomowe
Na AmigaOS
  • BOOPSI
  • MUI
  • ReAction GUI
  • Zune
Na macOS
  • Carbon
  • Cocoa
  • MacApp
  • MacZoop
  • PowerPlant
Na Windows
Na Unix,
bez X11
  • Athena (Xaw)
  • InterViews
  • LessTif
  • Motif
  • OPEN LOOK
Wieloplatformowe,
według języka
CLI
  • Gtk#
  • Moonlight
  • Tao
C
Objective-C
  • GNUstep
C++
Flash
  • Apache Flex
Java
Desktop
Web
JavaScript
Common Lisp
  • CAPI
  • Common Graphics
  • CLIM
  • Ltk
  • McCLIM
Pascal
  • LCL
Object Pascal
  • CLX
  • fpGUI
  • IP Pascal
  • LCL
Perl
  • wxPerl
  • Perl/Tk
PHP
Python
Ruby
  • Shoes
  • QtRuby
XML
  • Ample SDK
  • CougarXML
  • GladeXML
  • Lively Kernel
  • Pyjamas
  • Rialto Toolkit
  • XAML
  • XUI
  • XUL
  • Wt