PracticU

סיכום - בניית חלון מאפס

בלי כתוביותעם כתוביות
PracticU › קורס C למתקדמים - עבודה מול חומרה Win32 › סיכום - בניית חלון מאפס
מילון מושגים:
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
שורת פקודה - ממשק טקסטואלי שבו מקלידים פקודות למערכת ההפעלה ומקבלים תגובה בטקסט, במקום להשתמש בעכבר.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.

סיכום - בניית חלון מאפס
זהו סיכום של פרק בניית חלון מאפס: נקודת הכניסה WinMain, יצירת מחלקת חלון וחלון, לולאת ההודעות, טיפול בעכבר וציור על החלון.
השלבים העיקריים
1. WinMain: נקודת הכניסה לאפליקציית Win32. הפונקציה מקבלת ארבעה פרמטרים: מזהה המופע, מופע קודם, שורת הפקודה ומצב ההצגה.
2. מחלקת החלון: מגדירים מבנה WNDCLASS עם שם המחלקה, שגרת החלון, צבע הרקע והסמן, ורושמים אותו עם RegisterClass.
3. יצירת החלון: CreateWindow יוצרת חלון לפי שם המחלקה, עם כותרת, קואורדינטות וגודל. מחזירה HWND.
4. לולאת ההודעות: GetMessage מושכת הודעות מהתור, ו-DispatchMessage שולחת אותן לשגרת החלון. בלי הלולאה החלון לא מגיב.
5. אירועי עכבר: WM_LBUTTONDOWN, WM_MOUSEMOVE ו-WM_LBUTTONUP. מיקום העכבר נמצא ב-LPARAM, כשהמילה הנמוכה היא X והגבוהה היא Y.
6. ציור: WM_PAINT מופעלת כשהחלון צריך להציג את עצמו מחדש. עם BeginPaint מקבלים HDC לציור, ו-EndPaint מסיימת.
7. זיכרון של נקודות: כדי שהציור לא יימחק, שומרים את הנקודות במבנה נתונים ומציירים אותן מחדש ב-WM_PAINT.
שימו לב
ההרצאה מזכירה שציור ישיר מחוץ ל-WM_PAINT נמחק כשהחלון מתעדכן, ולכן צריך לשמור את הנתונים ולצייר אותם שוב.
השיעור הבא בקורס: Paint Brush

פרקי ההרצאה: סיכום - בניית חלון מאפס

  1. 00:00

    יצירת פרויקט ריק ומבנה הקבצים

  2. 01:07

    הוספת קובץ main.cpp לפרויקט

  3. 01:48

    שגיאת WinMain בזמן הלינקינג

  4. 03:18

    שגיאת HINSTANCE וקובץ windows.h

  5. 06:15

    כתיבת WinMain עם הפרמטרים

  6. 07:53

    קומפילציה ואזהרת std call

  7. 10:35

    הרצת התוכנית לפני יצירת חלון

  8. 11:43

    יצירת חלון עם CreateWindowEx

תמלול ההרצאה: סיכום - בניית חלון מאפס

הטקסט המלא של הדקות הראשונות בהרצאה «סיכום - בניית חלון מאפס» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:31

    סימפל דיאלוג סמפל 0.1 זה יהיה סימפל דיאלוג סמפל 0.2 יפה ונגיד לו אוקיי ונעבור לאפליקיישן סטינג ומה שאנחנו נבקש זה אמפטי פרוג'ק ווינדוס אפליקיישן אמפטי פרוג'ק ונגיד לו finish בואו נסגור את החלון הזה יש לנו פה שלוש תיקיות ריקות אין לנו שום דבר בסורס פייבס אני אוסיף עכשיו new item ואני

  3. 01:16

    אגיד לו שאני רוצה קובץ pod c++ קובץ c++ חדש אז בואו זה יהיה בעצם המיין שלנו זה יהיה main.cpp ונגיד לו add יפה ופה אני רוצה לבנות את המערכת שלנו אז, אז בואו נתחיל ממש, נתחיל, בואו לא נעשה כלום, בואו פשוט ננסה לקמפייל לך, ביי ימני ובילד.

  4. 01:50

    אז בילד סטארטד, לינקינג, יפה. יש בעיה, הבעיה היא שהוא לא מוצא את win-main, true-to-16, win-main שמקבלת 16 בתים כפרמטר.

  5. 02:05

    תכף נראה למה 16 בתים, תרשום בבקשה שאני אסביר למה 16 בתים. יפה, והיא reference in T-Main CRT, אבל בקיצור יש פונקציה t-main c-run-time-startup שהיא פונה ל-win-main יפה אז אנחנו צריכים עכשיו התקלה היא בעצם במטרות הוויז'ול c-run-time-dibug-lead שם התקלה

  6. 02:31

    אוקיי בקיצור אנחנו צריכים פונקציה win-main אז בואו ננסה להוסיף תסתובב win-main כמו שהוא כותב את זה win-main ונעביר את הפרמטרים שהיא רוצה לקבל הפרמטר הראשון הוא מסוג h-instance זה כמו שראינו בשיעור הקודם, h-instance זה לא ראינו שום דבר מה זה h-instance טוב השאלה היא האם בכלל זה מוכר בוא נגיד בוא נסגור את זה

  7. 02:43

    ונגיד את זה אז עד עכשיו הייתה בעיה של לינקינג זאת אומרת קומפילציה זה עבר לא כתבנו פה כלום אז זה עבר קומפילציה אבל זה נכשל בלינקינג גם זה זה לינקינג one unresolved external אז הלינק נחשב לקומפילציה, עבר בשלום.

  8. 03:18

    השאלה היא האם עכשיו בכלל קומפילציה נעבור, אחוואר ירמני וקומפייל בכלל בלי לינקינג וכבר יש לנו אירו של קומפייל לא של lnk של c. h instance undeclared identifier יפה, הוא בכלל לא יודע מה זה h instance.

  9. 03:33

    אז על מנת שהוא יכיר את h instance אני צריך להוסיף include ולהגיד לו Windows.h יפה ו-Enter בואו נרצה עכשיו לעשות עכבר ימני ו-Compile יפה HInstance עדיין לא מוכר שנייה אחת נורא מוזר בואו נגיד לו עכבר ימני ו-Build HInstance HInstance צריך שיהיה פה N בואו נעשה קונטרול רווח כבר מזה HInstance שימו לב

  10. 04:22

    בואו רגע נסיר את השורה הזו ננצרל אותה יפה וננסה לעשות קונטרול רווח זה display quick וזה בעצם קונטרול רווח או זה מעניין הוא מזהה את win-main מה לגבי display object member list שנייה אחת טוב אז בואו נראה קונטרול רווח זה משלים כל מיני דברים אבל זה כל מיני קווים

  11. 04:47

    תחתונים זאת אומרת זה לא דברים שקשורים בואו נעשה גם את השורה הזו וננסה להגיד לו קונטרול רווח טוב פה הוא לא משלים בואו נכתוב לו פה h instants קונטרול רווח הוא לא משלים הוא מכיר יוניקורד הוא מכיר 32 מקבלים תחתונים אבל רשימה מאוד קצרה סך הכל של כל מיני דברים

  12. 05:13

    שלא בקיצור לא h-instance יפה כדי שהוא יכיר h-instance אני מבטל את זה אני אגיד לו uncomment יפה ועכשיו קונטרול רווח יפה אז הוא מכיר את h-instance יש לו גם h-instance כף תחתון כף תחתון זה אסטראקט וזה טיימפ דף של אסטראקט h אינסטאנט כף תחתון כף תחתון כוכבי בקיצור h אינסטאנט כמו כל דקלייר הנדל זה h זה הנדל ואם נבחר אותו ונצליח כבר אם אני אגיע לדפינישן נכנע שזה דקלייר הנדל כמו h מטאפייל וh זה וh

  13. 05:52

    pen וכל הh עם כולם מאוד דומים דקליי ההנדל של h-instance זה מה זה, זה פוטר לסטראס h-instance כף תחתון כף תחתון בואו נראה את זה אחרי ימני וגולד דפינישן זה מובן כבר בסדר אוקיי זה מובן יפה מאוד יפה אז נמשיך אז h-instance יש לנו יפה בואו נסיר את שני אלו ואני אמחק גם את זה ואנחנו רוצים עכשיו את ווין מיין הנה הוא מרחף מעל ווין מיין

  14. 06:26

    זה אומר לי שווין מיין אם קודם כל אמורה להחזיר אינס, יפה, אז בוא נגיד מחזירה אינס, נכון? זה מה שהוא אמר כשרכבתי המעלה. יפה. אחרי זה היא מקבלת h instance.

  15. 06:38

    עכשיו, אני לא אכתוב אפילו את הפרמטר כי אני לא רוצה להשתמש בו. בשפת c++ כמו ב-c אני לא חייב לכתוב שם של פרמטר. יפה.

  16. 06:48

    בואו נראה מה עוד אני צריך. יש לי עוד h instance. יפה. h instance. נתואר לעבר. אינטר. יפה. הפרמטר הבא זה לוג פוינטר ל-str.

  17. 07:01

    LPSTR F12, LPSTR זה בעצם צ'ער כוכבית וצ'ער, צ'ער זה צ'ער קטן, זאת אומרת אני יכול לכתוב צ'ער כוכבית, צ'ער כוכבית, ואגב h instance אני יכול לכתוב struct, טוב זה לא יקל עלינו יותר מדי אבל יותר טהור זה struct h instance כף תחתון כף תחתון כוכבית,

  18. 07:33

    זה בעצם h instance, ופה גם כן, טראק, h-instance, קו תחתון, קו תחתון, כוכבית, מצביע ל, יפה, צ'אר, כוכבית, והפרמטר האחרון, int, show. בוא נכתוב פה int, יפה.

  19. 07:55

    אם עכשיו אני אנסה לקמפייל, אחווה ימני וקומפייל, מה יהיה? אז הוא אומר, קודם כל, וורנינג, win-main must be std call. אבל סך הכל ה-בילד סקסידד, נורא מוזר, כי לא הגדלתי את הפונקציה, הצהרתי על הפונקציה לא זה לא זה לא שזה לא זה מובן למה כי זה רק קומפייל עדיין לא עשיתי קישור רק ניסיתי לקמפייל את הקובץ הזה

  20. 08:23

    הקובץ הזה עובר קומפילציה זאת אומרת מה זה קומפילציה קומפילציה זה אומר שהקומפיילר מבין איך לתרגם את הקובץ הזה כל הפקודות פה לאסמבלר בגדול אין פה אף פקודה אז הקובץ הזה הוא שווה ערך לקובץ רק לחלוטין למה כי השורה הזו היא בסך הכל הצהרה היא לא פקודה הצהרה זה לא פקודה אז אין פה פקודה לתרגם

  21. 08:45

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

  22. 09:14

    רק רגע להליץ הוא אומר וורנינג winmate must be std call טוב אז בואו נעמוד בתנאים שלו נביא גם כף תחתון כף תחתון std call יפה זה מאוד טהור שורה מאוד טהורה בואו ננסה עכשיו קודם כל לעשות קומפייל לראות אם זה מתקמפייל ללא שגיאות build succeeded ואין לנו וורנינגים ועכברי מניע לפרויקט ובילד ויפה יש לנו עכשיו

  23. 09:39

    שגיאה זו אבל סתם על סימבול winmate שמקבל 16 בתים רפרנס מפונקשנטים בקיצור עדיין אין גוף לפונקציה טוב עכשיו להוסיף גוף לפונקציה זה די פשוט הנה גוף לפונקציה בואו שוב נעשה קומפייל קומפייל בילד סקסידי זה קצת מוזר כי הפונקציה מבטיחה להחזיר אינט זהו שבסי פלאס פלאס כנראה שזה לא מחויב פונקציה אמנם

  24. 10:06

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

  25. 10:33

    לא חייבים אז לא נעשה את זה אז אני מניח שהוא רואה דיפול שלו זה בטח מחזיר ריטרן אפס יפה אז יש לנו את winmate כבר אני יכול להריץ את הדבר הזה בואו נריץ את זה כבר יש לנו תוכנית שאני כבר יכול לעשות בה משהו כמו message box 0 0 0 0 go הוא לא ייתן לי נכון אבל אם נריץ מחדש אז יש לנו error יפה מאוד טוב אז זה הדבר הראשון שרצינו לעשות הדבר

  26. 10:58

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

  27. 12:06

    משה סטייל הזה מצידי 0 קואורדינטות יהיו 10 10 100 100 החלון אף אפס, תפריט n, h instance, לא חשוב, param, לא חשוב, ואת כל זה אני מקבל לתוך, כן, רואים שפורום שיפט רבע, create window extension, הוא מחזיר hwnd, אז hwnd, hwnd, שווה לזה.

  28. 12:39

    בואו ננסה להריץ, תראה אם הוא באמת יותר חלון, אז זה אומר יש בעיה, זאת אומרת, פרמטר 2, יפה, עובד ב-w, זאת אומרת, ודיפולט שיוצרים פה מחדש הוא בווייד אז חייבים פה לשים אל ואם ככה אז גם פה חייבים לשים אל וסטפ אינטו ונגיד לו ליצור את החלון והוא ייצר חלון יפה יש לנו חלון אם היה נכשל אז

  29. 13:08

    אני חושב שהכל פה היה אפס יפה מאוד עכשיו הדבר הבא שאני רוצה לעשות זה להציג את החלון אז שואו ווינדו ולהעביר את hwnd ואת show window כף תחתון נורמל control f12 שהערך שלו הוא 1 זאת אומרת control f4 אני יכול פשוט להעביר פה 1 גם אם אתם לא אוהבים להעביר מקרואים לגבי hwnd מה זה hwnd אם אני רחף הוא לא אומר לי אבל אני מניח שזה בעצם סטראקט כמו כל הנדל זה סטראקט

  30. 13:51

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

  31. 14:30

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

לקורס המלא: קורס C למתקדמים אונליין

ההרצאה הקודמת: שגרת החלון

ההרצאה הבאה: Paint Brush

הרצאות קשורות מקורסים אחרים

  • בניית עמוד LOGIN אמיתי מאפס בשפת DART
  • בניית מודל
  • בניית שלב - חלק 1
  • בניית צ'אט באתר

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס תכנות מתקדם - #Advanced .NET C