
הטקסט המלא של הדקות הראשונות בהרצאה «סיכום - בניית חלון מאפס» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
טוב, מה שאנחנו נעשה היום זה קצת חזרה במקום לפתוח את הפרויקט שעבדנו עליו עד עכשיו אני אפתח ויז'ול סטודיו חדש וקריאייט פרויקט מתחיל מאפס אז בואו נראה, אז אנחנו באדר לינגוויצ'ס ויז'ול סיפרס פלאס ווין 32 ווין 32 פרויקט וזה יהיה אם זה היה סימפל
סימפל דיאלוג סמפל 0.1 זה יהיה סימפל דיאלוג סמפל 0.2 יפה ונגיד לו אוקיי ונעבור לאפליקיישן סטינג ומה שאנחנו נבקש זה אמפטי פרוג'ק ווינדוס אפליקיישן אמפטי פרוג'ק ונגיד לו finish בואו נסגור את החלון הזה יש לנו פה שלוש תיקיות ריקות אין לנו שום דבר בסורס פייבס אני אוסיף עכשיו new item ואני
אגיד לו שאני רוצה קובץ pod c++ קובץ c++ חדש אז בואו זה יהיה בעצם המיין שלנו זה יהיה main.cpp ונגיד לו add יפה ופה אני רוצה לבנות את המערכת שלנו אז, אז בואו נתחיל ממש, נתחיל, בואו לא נעשה כלום, בואו פשוט ננסה לקמפייל לך, ביי ימני ובילד.
אז בילד סטארטד, לינקינג, יפה. יש בעיה, הבעיה היא שהוא לא מוצא את win-main, true-to-16, win-main שמקבלת 16 בתים כפרמטר.
תכף נראה למה 16 בתים, תרשום בבקשה שאני אסביר למה 16 בתים. יפה, והיא reference in T-Main CRT, אבל בקיצור יש פונקציה t-main c-run-time-startup שהיא פונה ל-win-main יפה אז אנחנו צריכים עכשיו התקלה היא בעצם במטרות הוויז'ול c-run-time-dibug-lead שם התקלה
אוקיי בקיצור אנחנו צריכים פונקציה win-main אז בואו ננסה להוסיף תסתובב win-main כמו שהוא כותב את זה win-main ונעביר את הפרמטרים שהיא רוצה לקבל הפרמטר הראשון הוא מסוג h-instance זה כמו שראינו בשיעור הקודם, h-instance זה לא ראינו שום דבר מה זה h-instance טוב השאלה היא האם בכלל זה מוכר בוא נגיד בוא נסגור את זה
ונגיד את זה אז עד עכשיו הייתה בעיה של לינקינג זאת אומרת קומפילציה זה עבר לא כתבנו פה כלום אז זה עבר קומפילציה אבל זה נכשל בלינקינג גם זה זה לינקינג one unresolved external אז הלינק נחשב לקומפילציה, עבר בשלום.
השאלה היא האם עכשיו בכלל קומפילציה נעבור, אחוואר ירמני וקומפייל בכלל בלי לינקינג וכבר יש לנו אירו של קומפייל לא של lnk של c. h instance undeclared identifier יפה, הוא בכלל לא יודע מה זה h instance.
אז על מנת שהוא יכיר את h instance אני צריך להוסיף include ולהגיד לו Windows.h יפה ו-Enter בואו נרצה עכשיו לעשות עכבר ימני ו-Compile יפה HInstance עדיין לא מוכר שנייה אחת נורא מוזר בואו נגיד לו עכבר ימני ו-Build HInstance HInstance צריך שיהיה פה N בואו נעשה קונטרול רווח כבר מזה HInstance שימו לב
בואו רגע נסיר את השורה הזו ננצרל אותה יפה וננסה לעשות קונטרול רווח זה display quick וזה בעצם קונטרול רווח או זה מעניין הוא מזהה את win-main מה לגבי display object member list שנייה אחת טוב אז בואו נראה קונטרול רווח זה משלים כל מיני דברים אבל זה כל מיני קווים
תחתונים זאת אומרת זה לא דברים שקשורים בואו נעשה גם את השורה הזו וננסה להגיד לו קונטרול רווח טוב פה הוא לא משלים בואו נכתוב לו פה h instants קונטרול רווח הוא לא משלים הוא מכיר יוניקורד הוא מכיר 32 מקבלים תחתונים אבל רשימה מאוד קצרה סך הכל של כל מיני דברים
שלא בקיצור לא h-instance יפה כדי שהוא יכיר h-instance אני מבטל את זה אני אגיד לו uncomment יפה ועכשיו קונטרול רווח יפה אז הוא מכיר את h-instance יש לו גם h-instance כף תחתון כף תחתון זה אסטראקט וזה טיימפ דף של אסטראקט h אינסטאנט כף תחתון כף תחתון כוכבי בקיצור h אינסטאנט כמו כל דקלייר הנדל זה h זה הנדל ואם נבחר אותו ונצליח כבר אם אני אגיע לדפינישן נכנע שזה דקלייר הנדל כמו h מטאפייל וh זה וh
pen וכל הh עם כולם מאוד דומים דקליי ההנדל של h-instance זה מה זה, זה פוטר לסטראס h-instance כף תחתון כף תחתון בואו נראה את זה אחרי ימני וגולד דפינישן זה מובן כבר בסדר אוקיי זה מובן יפה מאוד יפה אז נמשיך אז h-instance יש לנו יפה בואו נסיר את שני אלו ואני אמחק גם את זה ואנחנו רוצים עכשיו את ווין מיין הנה הוא מרחף מעל ווין מיין
זה אומר לי שווין מיין אם קודם כל אמורה להחזיר אינס, יפה, אז בוא נגיד מחזירה אינס, נכון? זה מה שהוא אמר כשרכבתי המעלה. יפה. אחרי זה היא מקבלת h instance.
עכשיו, אני לא אכתוב אפילו את הפרמטר כי אני לא רוצה להשתמש בו. בשפת c++ כמו ב-c אני לא חייב לכתוב שם של פרמטר. יפה.
בואו נראה מה עוד אני צריך. יש לי עוד h instance. יפה. h instance. נתואר לעבר. אינטר. יפה. הפרמטר הבא זה לוג פוינטר ל-str.
LPSTR F12, LPSTR זה בעצם צ'ער כוכבית וצ'ער, צ'ער זה צ'ער קטן, זאת אומרת אני יכול לכתוב צ'ער כוכבית, צ'ער כוכבית, ואגב h instance אני יכול לכתוב struct, טוב זה לא יקל עלינו יותר מדי אבל יותר טהור זה struct h instance כף תחתון כף תחתון כוכבית,
זה בעצם h instance, ופה גם כן, טראק, h-instance, קו תחתון, קו תחתון, כוכבית, מצביע ל, יפה, צ'אר, כוכבית, והפרמטר האחרון, int, show. בוא נכתוב פה int, יפה.
אם עכשיו אני אנסה לקמפייל, אחווה ימני וקומפייל, מה יהיה? אז הוא אומר, קודם כל, וורנינג, win-main must be std call. אבל סך הכל ה-בילד סקסידד, נורא מוזר, כי לא הגדלתי את הפונקציה, הצהרתי על הפונקציה לא זה לא זה לא שזה לא זה מובן למה כי זה רק קומפייל עדיין לא עשיתי קישור רק ניסיתי לקמפייל את הקובץ הזה
הקובץ הזה עובר קומפילציה זאת אומרת מה זה קומפילציה קומפילציה זה אומר שהקומפיילר מבין איך לתרגם את הקובץ הזה כל הפקודות פה לאסמבלר בגדול אין פה אף פקודה אז הקובץ הזה הוא שווה ערך לקובץ רק לחלוטין למה כי השורה הזו היא בסך הכל הצהרה היא לא פקודה הצהרה זה לא פקודה אז אין פה פקודה לתרגם
אם הייתי אומר תראה לי את האסמבלר שנולד מהדבר הזה אז אין אסמבלר שנולד מהדבר הזה כי אין פה קוד אין פה קוד לביצוע בזמן ריצה יפה אז קומפייל עברנו בשלום הוא לא מסמן בשום מקום הוא צריך בארץ והוא תגיד הוא עושה קומפיילינג והוא לא עושה לינקינג הוא אומר וואן תקסיר אבל הוא לא בנה הוא רק קימפל את הקובץ הוא לא בנה עדיין את האקזרס הוא בוא
רק רגע להליץ הוא אומר וורנינג winmate must be std call טוב אז בואו נעמוד בתנאים שלו נביא גם כף תחתון כף תחתון std call יפה זה מאוד טהור שורה מאוד טהורה בואו ננסה עכשיו קודם כל לעשות קומפייל לראות אם זה מתקמפייל ללא שגיאות build succeeded ואין לנו וורנינגים ועכברי מניע לפרויקט ובילד ויפה יש לנו עכשיו
שגיאה זו אבל סתם על סימבול winmate שמקבל 16 בתים רפרנס מפונקשנטים בקיצור עדיין אין גוף לפונקציה טוב עכשיו להוסיף גוף לפונקציה זה די פשוט הנה גוף לפונקציה בואו שוב נעשה קומפייל קומפייל בילד סקסידי זה קצת מוזר כי הפונקציה מבטיחה להחזיר אינט זהו שבסי פלאס פלאס כנראה שזה לא מחויב פונקציה אמנם
מוגדרת כאינט אבל היא לא מחויבת יכול להיות בוא נגיד לו רגע הייתי אומר לו ריבילד טוב בוא נגיד לו קודם כל בילד אז בילד בילד סקסידי בוא נעשה ריבילד ריבילד ריבילד אמור להציג גם וורנינג לו היו אבל אין פה אף וורנינג, קצת מוזר הבטחנו שהפונקציה תחזירין c-sharp הייתה לועסת לנו את המוח בשלב זה תחזירין פה לא חייבים
לא חייבים אז לא נעשה את זה אז אני מניח שהוא רואה דיפול שלו זה בטח מחזיר ריטרן אפס יפה אז יש לנו את winmate כבר אני יכול להריץ את הדבר הזה בואו נריץ את זה כבר יש לנו תוכנית שאני כבר יכול לעשות בה משהו כמו message box 0 0 0 0 go הוא לא ייתן לי נכון אבל אם נריץ מחדש אז יש לנו error יפה מאוד טוב אז זה הדבר הראשון שרצינו לעשות הדבר
הבא שאנחנו רוצים לעשות מה הדבר הבא הדבר הבא זה ליצור חלון משלנו חלון שחי חלון שיש לנו שליטה עליו יש לנו חלון רציני אז נוותר על זה טוב בואו נמחק לשורה הזו ובואו ניצור חלון כדי ליצור חלון עושים קריאט ווינדור סתיו סוגריים קונטרול שנפנה לך משום מה הוא לא מגיב לי אז אני ניסיתי לעבוד עם אקסטנדד והוא כן מגיב סטייל 0 קלאס ניים אז נתנו לו פה בטון ווינדול ניים יהיה
משה סטייל הזה מצידי 0 קואורדינטות יהיו 10 10 100 100 החלון אף אפס, תפריט n, h instance, לא חשוב, param, לא חשוב, ואת כל זה אני מקבל לתוך, כן, רואים שפורום שיפט רבע, create window extension, הוא מחזיר hwnd, אז hwnd, hwnd, שווה לזה.
בואו ננסה להריץ, תראה אם הוא באמת יותר חלון, אז זה אומר יש בעיה, זאת אומרת, פרמטר 2, יפה, עובד ב-w, זאת אומרת, ודיפולט שיוצרים פה מחדש הוא בווייד אז חייבים פה לשים אל ואם ככה אז גם פה חייבים לשים אל וסטפ אינטו ונגיד לו ליצור את החלון והוא ייצר חלון יפה יש לנו חלון אם היה נכשל אז
אני חושב שהכל פה היה אפס יפה מאוד עכשיו הדבר הבא שאני רוצה לעשות זה להציג את החלון אז שואו ווינדו ולהעביר את hwnd ואת show window כף תחתון נורמל control f12 שהערך שלו הוא 1 זאת אומרת control f4 אני יכול פשוט להעביר פה 1 גם אם אתם לא אוהבים להעביר מקרואים לגבי hwnd מה זה hwnd אם אני רחף הוא לא אומר לי אבל אני מניח שזה בעצם סטראקט כמו כל הנדל זה סטראקט
hwnd כף תחתון כף תחתון כוכבית למה עדיף לראות את זה כך כי אז זה ברור שזה פוינטר יפה אז בואו נגיד לו עכשיו לזוז לפה הוא לא מוכן נגיד לו התחל מחדש ונשים פה ברייק פוינט נשים אפילו פה ברייק פוינט וסטפ והנה החלון חלון משה לפי הקואורדינל הזה שציינו מצוין יפה עכשיו החלון הזה אם אני אגיד לו תמשיך להורות אז התוכנית נסגרת והחלון נסגר
כל המשאבים של התוכנית של הפרוצס מערכת ההפעלה משחררת כולל החלון אז אין לו כלום יפה על מנת שהחלון הזה יתפקד אני צריך למשוך הודעות אז החלון ככה הוא מתפקד