דפים

Wednesday, June 1, 2011

למה שמישהו עדיין ישתמש ב MFC?

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

מהו ה MFC? זוהי למעשה תשתית של מייקרוסופט שמהווה מסגרת לכתיבת מנשקי משתמש בוינדואוס. MFC עוטפת את מחלקות ה C++ ואת הממשקים של וינדואוס ומאפשרת למתכנת להשתמש ולשלוט על חלונות ופקדים עבור התוכנית שלו. MFC הוצגה על ידי מייקרוסופט כבר ב 1992 כדוגמא ליכולות של C++ בוינדואוס, אך למעשה הועתקה, או הייתה בהשראת, ה TCL של אפל.

כיום, מייקרוסופט כבר פיתחה סביבות טובות ומתקדמות יותר מ MFC לפיתוח GUI. בראשן כמובן תשתית הדוט נט, הנוחה כל כך לשימוש בהשוואה ל MFC, שמאפשרת פיתוח גוי בצורה נוחה, מהירה ויעילה. אז מדוע שמישהו בכלל יפזול לכיוון ה MFC היום? הרי כל דבר שרוצים לשנות שם, צריך להבין לעומק את הסביבה, איך היא עובדת ומה בדיוק רץ אחרי מה וכל שינוי כזה הופך לעבודה מתסכלת של חפירה אינסופית באינטרנט, בפורומים וב MSDN. הרבה שעות שרפתי על להבין תהליכים ב MFC, הרבה שעות של יאוש מוחלט, של דפיקת הראש בשולחן וקריאה לעזרה למלאכי שמיים, אשר גם הם לא שפכו אור על מה לעזאזל גורם לחלון לצייר את הפקד לא כמו שאני (חשבתי ש) ביקשתי ממנו.

לדוגמא, קחו קטע קוד שכל תפקידו הוא להפוך את הפונט של פקד טקסט לפונט מודגש:

// get the font of the static text control
HFONT hFont = (HFONT)::SendMessage( GetDlgItem(hwndDlg, IDC_MESSAGETEXT), WM_GETFONT, 0, 0 );



// get LOGFONT struct from HFONT handle
LOGFONT lf;
::GetObject(hFont, sizeof(lf), &lf);

// make it bold
lf.lfWeight = FW_BOLD;



// recreate the HFONT handle
hFont = CreateFontIndirect(&lf);


// set the font
::SendMessage( GetDlgItem(hwndDlg, IDC_MESSAGETEXT), WM_SETFONT, (WPARAM) hFont, MAKELPARAM(false, 0) );

וכל זה צריך לזכור לעשות ב OnInitDialog כי אחרת צריך להוסיף פקודות נוספות שירפרשו את החלון. בקיצור, סיוט.

ובכל זאת, במוצר מסויים אשר מפותח על ידי, הייתי צריך לבחור באיזו טכנולוגיה לכתוב את ה GUI ובכל זאת בחרתי ב MFC. כאשר בדקתי אופציות לטכנולוגיות GUI, הדבר שעמד לנגד עיני היה איך אני מונע מהיוזר את ההכרח להתקין את כל החבילה של דוט נט על המחשב שלו. לכל מפתח תוכנה בימינו, שעובד עם הטכנולוגיות של מייקרוסופט, דוט נט חייב להיות מותקן על המחשב. אנחנו עובדים עם ויז'ואל סטודיו וכלים אחרים של מייקרוסופט אשר מחייבים זאת. אבל המשתמש הפשוט, הפקידה בבנק, העו"ד במשרד? למה שאני אחייב אותו להתקין יותר מ 100 מגה על המחשב האישי שלו בשביל תוכנה קטנה שבה ה GUI הוא דבר זניח ו 99% מהזמן שלה היא רצה ברקע? אופציית דוט נט בוטלה בו במקום.

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

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

וכמו בפוסט הפתיחה, גם פה אסיים בשיר. שיר מהדיסק החדש והמצויין של ACCEPT:


No comments:

Post a Comment