MFC

Microsoft Foundation Class Library
Logo Microsoft Foundation Class Library
Logo programu
Autor Microsoft
Pierwsze wydanie 1992 – 34 lat temu
Aktualna wersja stabilna 14.22.27821.0 – 24 lipca 2019; około 6 lat 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++.

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Kembali kehalaman sebelumnya