Microsoft Foundation Classes

מחלקות התשתית של מיקרוסופט, Microsoft Foundation Classes, או MFC, זו ספרייה של מיקרוסופט, העוטפת במחלקות ++C את ה-API של חלונות, ומהווה מסגרת יישום לפיתוח בסביבת חלונות. מוגדרות בה מחלקות עבור מרבית שגרות הטיפול באובייקטים של חלונות וכן עבור חלונות מוגדרים מראש (predefined windows) ופקדים שכיחים.

 ההיסטוריה של MFC 
 תחילת הדרך 
MFC נוצרה ב־1992 עם המהדר (C/C++ 7.0 (compiler של מיקרוסופט, לשימוש עם גרסאות 16 ביט של חלונות. היה זה חלק ממאמץ כללי של מיקרוסופט להשגת נתח שוק לכלי פיתוח. MFC עוצבה להיות חלון הראווה ליכולותיה של שפת התכנות ++C. באותם ימים ++C רק החלה להחליף את C בפיתוחם של יישומי תוכנה מסחריים ו־C/C++ 7.0 הייתה הראשונה בין המהדרים של מיקרוסופט בהוספת תמיכה ב־++C. את ההשראה לפיתוחה קיבלה MFC מ־TCL) Think Class Library) של מקינטוש - שמאוחר יותר נרכשה על ידי סימנטק - ובהרבה מובנים קיים דמיון למבנה שלה.

 בתחרות עם בורלנד 
OWL) Object Windows Library) היה מוצר מתחרה שהוצג בידי בורלנד באותה התקופה. ה-OWL עוצב עבור מהדר הטורבו C של בורלנד. לזמן מה היה OWL פופולרי יותר מאשר MFC, מכיוון שהוא נאמן יותר לקווים המנחים של תכנות מונחה עצמים. אך למרות זאת הוא איבד נתח שוק, עקב הפיגור בהוצאת עדכוני OWL למאפייניה החדישים של חלונות וכאשר בורלנד שחררה גרסה חדשה של סביבת פיתוח, חסרת תאימות למהדורות הקודמות, היה זה עקב כך, שנאלצה לרכוש ממיקרוסופט רישיון לשימוש ב-MFC.

 שינויים במאקרויים של ++C 
כאשר MFC הוצגה, מיקרוסופט הרחיבה את תחביר ++C עם סדרות של מאקרויים לניהול הודעות (messages), חריגות (exceptions) וטיפול דינמי בעצמים בזמן ריצה (dynamic class instantiation), של חלונות. השינויים התחביריים להודעות חלונות נועדו לצמצום הזיכרון הנדרש, באמצעות מניעת שימוש מיותר בטבלה וירטואלית (vtable) וסיפקו מבנה יותר קונקרטי למגוון הכלים המסופקים בסביבת הפיתוח Visual C++ לעריכת ולתמרון קוד בלי לנתח את כל השפה. המאקרויים לטיפול בהודעות החליפו את מנגנון הפונקציות הווירטואליות שסופק על ידי ++C. מכיוון שכמה גרסאות של מאקרויים הכשילו את בדיקת הטיפוס הנעשית בידי המהדר, השימוש בהם נעשה מקור פורה לבאגים עבור משתמשי MFC. המאקרויים המיישמים סִדרות (serialization), תמיכה בחריגות וטיפוסי זמן ריצה דינמיים (dynamic runtime types), היו פחות בעייתיים והקדימו יכולות להרחבות של שפה מבוססת תקן, במספר שנים. גרסות 32 ביט של MFC, עבור Windows NT 3.1 ומערכות הפעלה מאוחרות יותר של חלונות, שמרו על מאפיינים אלו לשם תאימות.

 התפתחויות מאוחרות 
MFC קודמה בתחילה בידי מיקרוסופט. אך הבולטות שניתנה לה, הועמדה מאוחר יותר בצילן של מספר טכנולוגיות אחרות. ההתפתחות באה כשנעשה ברור ש־MFC מורכבת מדי עבור מתכנתים רבים ולכן שמה מיקרוסופט דגש רב יותר על Visual Basic ככלי פיתוח לתוכנה מסחרית. כיום, היורש של Visual Basic ושל MFC הוא Windows Forms ב-Rapid application development של Net.. תוכניות C++
Native יכולות להשתמש ב־Windows Forms באמצעות הוספת C++ managed extensions.

MFC ממשיכה גם כיום לשמש לפיתוח חדש, בחברות שנכנסו להתחייבות אסטרטגית ל־++C ולפלטפורמת חלונות.

 יתרונות של MFC 
 מהצד המעשי, יתרונה העיקרי של MFC הוא באספקת מודל תכנות מונחה עצמים ל־APIs של חלונות. 
 יתרון נוסף של MFC הן עטיפות טיפוסי ++C עבור טיפוסי נתונים משויכי־משאב נפוצים של חלונות, שמספקים סגירת טיפול אוטומטית, כאשר האובייקט שייצר אותן חורג מהתחום. 
 MFC מספקת מסגרת עבודה של מסמך/תצוגה (Document/View) ליצירת ארכיטקטורה מבוססת MVC (תבנית Model-View-Controller).

 מחלקות MFC 
ב־MFC למעלה ממאתיים מחלקות, שקוד המקור המלא שלהן, כלול בכל עותק של סביבת הפיתוח ++Visual C. המחלקות מאורגנות בעץ תורשה שבראשו המחלקה CObject ורוב המחלקות יורשות ממנה. על פי רוב, גם מחלקה שכותב המתכנת תירש מ־CObject. את רובן של המחלקות אין צורך להכיר באופן מיידי. וכאשר עולה צורך באחת מהן, ניתן לחפש מידע עליה בעזרה המקוונת של מיקרוסופט MSDN.

 סימון בשיטה ההונגרית 
בשיטת סימון זו מקבל משתנה שם תאורי שמתחיל באות גדולה. כאשר השם מורכב ממספר מילים, כל מילה מתחילה באות גדולה. את השם מקדמים באותיות שמציינות את טיפוסו. לדוגמה: b תציין משתנה בוליאני (boolean), מחלקה (class) תצוין ב־c ומחרוזת (string) תצוין באמצעות str או sz (או psz אם המחרוזת מוחזקת על ידי מצביע בתכנה).

משתנים בשיטה זו עשויים להראות כך: lpszName, או hWnd.

מתכנת הונגרי בשם צ'ארלס סימוניי, הנהיג במיקרוסופט שיטה זו למתן שמות ועל שמו היא נקראת השיטה ההונגרית. אפשרות נוספת היא שבמבט חפוז השמות נראים ככתובים בשפה זרה ולכן קיבלו שם זה.

שיטה זו נועדה ליצור אחידות בקוד ולמנוע שגיאות בשימוש במשתנים בשל חוסר תשומת לב לטיפוס של המשתנה. לשיטה נמצאו תומכים בשל יעילותה ומתנגדים בשל כיעורה, אך בפועל Windows API ו־MFC מבוססות על שיטה זו ולכן בתכנות לחלונות נהוג להשתמש בה.

 לימוד MFC 
כאמור MFC הייתה מורכבת מדי בעבור מתכנתים רבים והיוותה רף גבוה מדי.

בסביבת הפיתוח ++Visual C ישנם אשפים (wizards) המייצרים כמויות גדולות של קוד במהירות רבה. למרות היתרון הקיים באשפים אלו, ישנם הממליצים להתחיל את הלימוד בלא להשתמש בהם כיוון שהם עלולים לבלבל את המתלמד.

ייתכן שכדאי גם ללמוד באופן תאורטי את העקרונות המופשטים העומדים בבסיס השפה עוד בטרם כתיבת הקוד. עקרון שכזה לדוגמה הוא מודל מסמך/תצוגה.

כדי לשלוט ב־MFC יש לדעת את הנושאים הבאים:
 שפת התכנות C. אף על פי שיש הסוברים כי לאחר שפותחה ++C, לימוד שפת C מיותר. אך כדי להכיר את Windows API שכתוב ב־C - וש־MFC מהווה מעטפת ++C עבורו - נחוץ לדעת גם שפה זו.
 שפת התכנות C++, משמשת בלימוד ובכתיבת הקוד של MFC.
 מערכת ההפעלה חלונות. נדרש ידע כללי על מרכיביה של מערכת הפעלה זו.
 הכרת יישום חלונות והדרך בה הוא מקושר למערכת ההפעלה חלונות, עליה הוא פועל.
 הכרה בסיסית של תכנות ב־API של חלונות.
 ידיעת סביבת הפיתוח Visual C++, על תפריטיה השונים ועל חלקי חלון הפרויקט שנבנה בה.
 ספריית MFC ודרך השימוש בה.

 גרסאות 
 גרסת מוצרתכונות עיקריות גרסת .Net ספריה גרסת MFC שנת שחרור Microsoft C/C++ 7.0ממשק עבור WINDOWS API

מחלקות לשימוש כללי:

מחלקות אוסף - Collection

מחלקת מחרוזת - String

מחלקות זמן ותאריך

תמיכה ביישומי ריבוי מסמכים - MDI MFC 1.0 1992 Visual C++ 1.0תמיכה בחלוניות Open ו Save As ובתצוגת רשימת קבצים אחרונים
תמיכה בתצוגה לפני הדפסה

תמיכה בסרגלי כלים ושורת סטטוס

תמיכה משופרת בממשק OLE 1.0

תמיכה ב-DLL MFC 2.0 Visual C++ 1.5תמיכה בקישוריות למסדי נתונים -ODBC
ממשק ל-OLE 2.01 MFC 2.5 Visual C++ 1.51 MFC 2.51 Visual C++ 1.52c MFC 2.5 
(עדכון אחרון ל- Windows 3.x) Visual C++ 2.0תמיכה בכרטיסיות
סרגלי תפריטים צפים

ערכת פיתוח פקדים - CDK ליצירת פקדי OLE MFC 3.0 Visual C++ 2.1תמיכה בפקדים המשותפים

דרייבר ODBC 2 משולב עם מנוע Access Jet

מחלקות winsock MFC 3.1 Visual C++ 2.2 MFC 3.2 Visual C++ 4.0מחלקות עצמי גישה לנתונים - DAO

סרגלי פקדים צפים של חלונות 95

תמיכה מליאה בפקדים המשותפים של חלונות 95

מחלקות לסנכרון מטלות MFC 4.0 (mfc40.dll כולל עם Windows 95) אוגוסט 1995 Visual C++ 4.1 MFC 4.1 Visual C++ 4.2מחלקות WinInet

מחלקות שרת ActiveX Documents

מחלקות פקדי MFC ActiveX MFC 4.2 (mfc42.dll כולל Windows 98  מרץ 1998 eMbedded Visual C++ 3.0 mfc42.dll MFC 4.2 Visual C++ 5.0ספריית ATL

תמיכת שפת C++ עבור לקוח - COM mfc42.dll MFC 4.21, עדכון 
גדול מ MFC 4.2. Visual C++ 6.0תמיכה עבור HTML דינמי

מכולות מסמכים פעילים

תמיכה ב־ADO mfc42.dll MFC 6.0 1998 eMbedded Visual C++ 4.0 mfcce400.dll MFC 6.0 Visual C++ .NET 2002
(Visual C++ 7.0) 1.0 mfc70.dll MFC 7.0 פברואר 2002 Visual C++ .NET 2003
(Visual C++ 7.1)  Visual C++ .NET 2003 + MS11-025 1.1 mfc71.dll MFC 7.1  MFC 7.10.6119.0 אפריל 2003 אפריל  2011 Visual C++ 2005 
(Visual C++ 8.0)  Visual C++ 2005 SP1  Visual C++ 2005 SP1 + MS09-035 2.0 mfc80.dll MFC 8.0.50727.42  MFC 8.0.50727.762  MFC 8.0.50727.4053  MFC 8.0.50727.5592  MFC 8.0.50727.6195 אוקטובר 2005 יוני 2007 יולי 2009 אפריל 2011 יוני 2011 Visual C++ 2008 
(Visual C++ 9.0)  Visual C++ 2008 with Feature Pack  Visual C++ 2008 SP1  Visual C++ 2008 SP1 + MS09-035 3.5 mfc90.dll MFC 9.0.21022.8  MFC 9.0.30411  MFC 9.0.30729.1  MFC 9.0.30729.4148  MFC 9.0.30729.5570 נובמבר 2007 אפריל 2008 אוגוסט 2008 יולי 2009 
אפריל 2011 Visual C++ 2010 
(Visual C++ 10.0)  Visual C++ 2010 + MS11-025 4.0 mfc100.dll MFC 10.0.30319.1  MFC 10.0.30319.415  MFC 10.0.40219.1  MFC 10.0.40219.325 אפריל  2010 אפריל 2011 מרץ 2011 אוגוסט 2011 Visual C++ 2012 
(Visual C++ 11.0)  Visual C++ 2012 Update 1  Visual C++ 2012 Update 3  Visual C++ 2012 Update 4 4.5 mfc110.dll MFC 11.0.50727.1  MFC 11.0.51106.1  MFC 11.0.60610.1  MFC 11.0.61030 26 ביולי 2012 5 בנובמבר  2012 26 ביולי 2013 20 בנובמבר  2013 Visual C++ 2013 
(Visual C++ 12.0)   Visual C++ 2013 Update 2 4.5.1, 4.5.2 mfc120.dll MFC 12.0.21005.1  MFC 12.0.30501.0 5 באוקטובר 2013 30 בדצמבר 2014 Visual C++ 2015 
(Visual C++ 14.0)   Visual C++ 2015 Update 1   Visual C++ 2015 Update 2   Visual C++ 2015 Update 3  Visual C++ 2015 Update 3 + KB3165756 4.6  4.6.1 mfc140.dll MFC 14.0.23026.0  MFC 14.0.23506.0  MFC 14.0.23918.0  MFC 14.0.24210.0  MFC 14.0.24212.0 20 ביולי 2015 30 בנובמבר  2015 Visual C++ 2017 (Visual C++ 15.0) 4.6.2 mfc140.dll MFC 14.10.25008.0 7 במרץ 2017

 לקריאה נוספת 
 מאיר סלע, Visual C++/MFC-מדריך מקצועי - הוצאת 'מרכז ההדרכה 2000', 2001.

 קישורים חיצוניים 

 MSDN MFC Reference
 MSDN MFC newsgroup

 הערות שוליים 

קטגוריה:ספריות תוכנה
קטגוריה:כלי פיתוח מבית מיקרוסופט