
WinMain. תוכנית כזו עם return 0 רצה ונסגרת מיד, והיא התוכנית החלונאית הקצרה ביותר שאפשר להריץ.MessageBox מציגה הודעה בלי חלון אב. ההרצאה השתמשה בה כדרך הפשוטה ביותר לראות שהקוד רץ.CreateWindowEx מחזירה HWND, ידית לחלון. שם המחלקה BUTTON גורם לכך שהחלון ייראה ויתנהג ככפתור. ההרצאה הסבירה שההתנהגות של החלון נקבעת במחלקה שלו.ShowWindow מציגה את החלון. הערך 0 מסתיר אותו, וערך "רגיל" מציג אותו.GetMessage מחכה להודעה ממערכת ההפעלה (עכבר, מקלדת וכדומה), ו-DispatchMessage מעבירה אותה לפונקציית הטיפול. בלי הלולאה החלון נתקע ולא מגיב. בזמן ההמתנה העומס על המעבד נשאר אפסי.SetWindowLong עם האינדקס -4 (GWL_WNDPROC) מחליפה את פונקציית החלון בפונקציה שכתבנו, WndProc. הודעה שלא מטופלת מועברת ל-DefWindowProc, שמממשת את ההתנהגות הרגילה של חלון.WinMain(HINSTANCE, HINSTANCE, LPSTR, int) הארגומנטים מועברים על ידי Windows, וההרצאה ציינה שאפשר להתעלם מהם בשלב זה.CreateWindowEx(0, L"BUTTON", L"משה", 0, 10, 10, 110, 110, 0, 0, hInstance, 0). הקואורדינטות שונו מ-0 ל-10 כדי שהחלון לא יישאר בפינה.GetMessage(&msg, NULL, 0, 0) ו-DispatchMessage(&msg).DefWindowProc(hwnd, message, wParam, lParam) לכל הודעה שלא טופלה.OutputDebugString יחד עם wsprintf ופורמט %x להצגה בהקסדצימלי.L"...". בלי ה-L הקומפיילר לא מקבל אותה.ShowWindow עם 0 מסתיר את החלון. זו טעות נפוצה כשחלון לא נראה על המסך.הטקסט המלא של הדקות הראשונות בהרצאה «בניית חלון מאפס» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
טוב, אז בואו ונבנה דיאלוג פשוט ב-C++, בואו נפתח וידאול סטודיו, קריאייט פרוג'קט, C-sharp אני סוגר, other languages, C++, ווי 32, ווי 32, ווי 32 פרוג'קט.
זה יהיה simple dialog, dialog sample 01. יפה, ונגיד אוקיי. נפתח את זה, בסדר, אפליקיישן סטינג זה יהיה ווינדוס אפליקיישן זה אני לא אגיד לו אמפתי אני אתחיל מווינדוס אפליקיישן יפה מאוד נגיד לו פיניש וניתן לו לבנות או מאוד מהר הוא בנה משהו בהזדמנות אחרת נעבור על הקוד הזה נכון זה לא מעניין אתכם הקוד הזה לא אתם רוצים לבנות זה באמת קוד באמת זה מוגזם זה
מוגזם לבנות את זה בעצמנו או לעבור על זה לבנות בעצמנו כן אבל לעבור על זה זה באמת מוגזם, לבנות את זה בעצמנו אנחנו נבנה יום אחד אבל לעבור על זה זה באמת לא כדאי כרגע מה שאני רוצה זה ללקוט את זה, עכשיו בואו בואו בואו נראה מה בעצם הוא בנה, מה שהוא בנה מכל
המפלצת הזו שהוא בנה בסופו של דבר זה הקובץ שיש בו באמת משהו יש בו את הקוד הזה, הקובץ הזה יש בו רק include אחד והוא לא מעניין read me יש בו סתם מלל וזה לא מעניין האייקון זה בסך הכל תמונה של אייקון וזה לא מעניין ה-rc עוד איכשהו מעניין כי יש בו את
הדיאלוג של ה-about שאנחנו עוד נחזור אליו עוד נדבר עליו ה-iqo זה עוד אייקון לא מעניין target version זה סתם כל מיני לא מעניין stdfx כל מיני using כל מיני including בסדר simple dialogue sample יש בו רק את ה-resource.h מה זה resource.h?
נקודה שאני אגיד לו שאומר לי שאי אפשר כרגע לראות את זה כי הוא כבר פתוח במה הוא פתוח הוא פתוח כי זה פתוח זה אפשר לראות פה וזה בעצם ה-resource מה שאני עכשיו רוצה לראות את ה-resource אני אגיד לו yes ה-resource אנחנו עוד נחזור אליו הוא מכיל כל מיני דברים מעניינים זה פריט מהתפריט זה מהתפריט מניו ה-id של המניו של פריט about ה-id של הדיאלוג
about בוקר עוד נחזור לקובץ הזה בואו נסגור עכשיו את כל הקבצים יפה אני רוצה לקות דאבל קליק אני בוא אולי קודם כל בואו נריץ אם אני מריץ אז מה הוא בנה לי ניתן לו רגע בין סטארטנד בוא נראה את האאוטפוט יפה בנה חלון בנה חלון לבן שאני יכול לשנות את הגודל שלו ויש פה תפריט פייל אקזיט והלפי בארט והלפי בארט הוא מציג לי את זה באוקיי אני סוגר את הדיאלוג ויש לי פייל אקזיט אני יכול לסגור יפה
מאוד אבל מאוד לא שימושי כי בסופו של דבר אנשים לא בונים חלונות אנשים בונים דיאלוגים מה שאותנו מעניין זה דיאלוג כמעט כל אפליקציה שתפתחו פה בסופו של דבר היא דיאלוג היא לא חלון כל אפליקציה הכיבוקס והגוגל טוק והרימורט והפיינט הם לא חלונות הם דיאלוגים תיבות שיחה הם בעצם אפשר להגיד שהם
כמו הדיאלוג הזה דיאלוג את זה, אני יכול לעשות אזור לבן, כל מיני דברים, ושישנה את הגודל שלו, אני יכול הכל לעשות עם הדיאלוג הזה, ותכף נראה שזה הרבה יותר קל מאשר לבנות את החלון הזה.
החלון הזה זה הרבה מאוד קוד יחסית מסורבן, וגם בקיצור נורא נורא נורא נורא נוראי. טוב, אז כדי שנעשה משהו מועיל, מה שאני רוצה זה, אני אתרכז פה בדבר הזה, winrain.
winrain היא בעצם המייל האמיתית. כשאתם יוצרים קונסול, אז למעשה הווין מיין או הכף תחתון t ווין מיין מפעילה את הקונסול אבל זאתי האמיתית ביותר זאתי המיין האמיתית הראשונה שמופעלת אפשר להגיד על ידי מערכת ההפעלה יפה למה כף תחתון t כי היא מקבלת סטרינג מה שמקבל סטרינג אז תמיד יש שתי גרסאות כדי שתמיד תהיה גרסה אחת בקיצור אז זה t אז זה טקסט וזה גם יוניקוד
וזה גם אסקי אבל על זה כבר עמדנו בהרצאות אחרות זה פחות מעניין כרגע מה שאני רוצה כרגע לעשות זה את הפונקציה הזו בעצם לצמצם.
זה אני רוצה, רק את זה עכשיו, כדי שפה כל השאר עדיין יעבוד, אז אני אגיד לו פה, אני אפילו אקח את הפונקציה, אתם יודעים מה, כן, אני אקח את כל זה, ואני אעשה לזה קופי, ואני אעביר את זה, או בעצם ביחד עם הקו הזה, שיפט, את כל זה אני אקח, אני אשים את זה כאן,
קופי. יפה, ואני אשים פה x. זאתי לא win-man, זאת אומרת, כל מה שנותר לנו כרגע זה רק זה. עכשיו מה זה הפרמטר הזה hinstance ו-hinstance וזה?
אלה טיפוסים שמוגדרים ב-windows.h בסך הכל בהזדמנות אחרת עוד נלמד על הפרמטרים האלה הם לא מעניינים כל פעם ש-windows מפעילה תוכנית היא מעבירה את ה-hinstance ומבחינה היסטורית היא מעבירה את ה-previnstance שהוא תמיד 0 ואת ה-command line שנדבר על זה בהזדמנות ואת ה-show שנדבר עליו בהזדמנות.
אבל למעשה הפרמטרים האלה לא מעניינים, אני יכול לחלוטין להתעלם מהם. אני חייב לקבל אותם, כי הפונקציה חייבת להיראות ככה.
יפה. לגבי ה-API Entry, בהזדמנות אחרת. עכשיו, מכיוון שה-WinMain, או ה-T-WinMain, כתוב שאין, אז אני צריך להכניע 0, אז קודם כל בוא נגיד לו Return 0. יפה. כאן יש לי תוכנית שאני כבר יכול להפעיל, ולמעשה זו תוכנית חלונאית קצרה ביותר בעולם. יותר קצרה מזה לא יכול להיות.
למרות שעדיין לא ניקינו, אני כבר יכול להריץ אותה. אז הנה, אנחנו מתחילים עכשיו את הריצה, ומבצעים את טיין, ו...
אז זה יפה, אנחנו חוזרים עכשיו ל-c run time x, איזשהו קוד שהוא זה שהפעיל את win main, או את w win main, כתלות ב... אם אנחנו יוניקוד או לא יוניקוד, זה לא מעניין. ניתן לו, נסגור את זה, ונגיד לו תמשיך לרוץ, ובעצם הוא סיים. יפה.
אז יש לנו את התוכנית החלונאית הקצרה ביותר בעולם. מה זה אומר? זה אומר שכבר את כל השאר אני יכול להעיף לזבל. אבל אני עדיין לא אעיף את זה לזבל, אני רק רוצה שנתרכז בזה.
יפה. מה שהייתי רוצה עכשיו זה שהתוכנית שלי תציג משהו. כמובן שאני יכול להציג מסג'בוק, זה לא יהיה אתגר גדול, מסג'בוק, ולהגיד לו שאין לו חלון אב, ואל תציג טקסט, ואל תציג קפשן, ורק תציג מסג'בוק, כפתור mbok, ואני יכול שוב
את זה להריג, והנה המסג'בוק הקטן ביותר בעולם. אוקיי וסיימנו יפה אז יש לנו מסג'בוקס אוקיי הדבר הבא שאני רוצה לעשות זו כבר קפיצת מדרגה אני רוצה להציג חלון שיש עליו לא משנה מה איזשהו חלון את התוכנית החלונית הקצרה ביותר בעולם אז איך טוב מסג'בוקס למעשה היא נראית נורא פשוטה אבל מאחורי הכללים היא יוצרת חלון
היא עושה הרבה מאוד דברים אנחנו תכף נלמד איך עושים את הדברים האלה אבל כרגע בואו נבטל על זה אני רוצה ליצור חלון.
כדי ליצור חלון אני קורא ל-Create, Create Windows זה, בוא נעשה קונטרול רווח, ויש Create Window W. בוא נוסיף לו E, Create Window, Create Window A, Create Window Extended, בוא נקרא ל-Create Window רגילה.
Create Window רגילה, זהו, שהוא לא משלים, הוא לא עושה כלום, אז בוא נקרא ל-Create Window Extended. יפה, בואו נפתח את זה, גם את זה הוא לא משלים, אה, נפלא, או את זה הוא כן משלים, יפה.
הסטייל, אני אגיד לו בלי סטייל. קלאס ניים זה חשוב מאוד שימו לב פה אני אגיד לו שאני רוצה שזה יהיה חלון מבוסס בטון תכף תבינו שתראו את זה אז תבינו מה זה אומר הווינדול ניים שם החלון נקרא לו משה והסטייל הזה אני אגיד לו 0 הקואורדינטות נגיד לו 0 0 ו-0 ו-0 הפארנט הוא 0 התפריט הוא 0 האינסטנט נגיד לו 0 נראה מה אני אעשה עם זה פרמטר 0 ציינו אבל זה רק יוצר לי חלון מה זאת אומרת
יוצר לי חלון זאת אומרת הוא רק מחזיר לי הנדל לחלון עוד על הנדלים והנדלים לחלונות זה הזדמנות אחרת יפה אז hwnd hwnd שם המשתנה יש לי חלון אוקיי עכשיו אני רוצה להציג את החלון להציג את החלון אני צריך לקרוא ל show window show window ואני נותן לה את hwnd אציג את החלון ונגיד לו פה 0 להציג את החלון.
זה אמור להציג את החלון. זה כבר אמור לעשות את העבודה המיני מיני מינימלית. בואו נראה את זה. לא מתקמפל, מה פספסנו?
בואו נראה את זה. אז התוכנית שלנו היא, אם נרחב מעליו, היא w, נכון? רואים בסוף עוד w? זה create window, זה define. create window, אני אנסה עליו go to definition, למדנו את זה הרבה פעמים, אבל זה בעצם window w, כי unicode מוגדר, ואכן הוא לא מקבל את זה.
אז או שנגיד לו L או שנגיד לו טקסט, בואו נגיד לו L, זה יותר קצר, נגיד לו L, יפה, ונריץ אותו כך. אז בואו נגיד לו קריאט ווינדו, קריאט ווינדו לא מציג שום דבר, עכשיו נוצר חלון אבסטרקטי, ועכשיו תיאורטי אמור להיות חלון, אבל זהו, לא מופיע, אז שאלה היא מה ה-SWND החזירה, אה, דווקא נראה שהוא יצר חלון, אז שואו ווינדו דווקא אמורה להציג את החלון,
הבעיה היא, יכול להיות שהקואורדינטות פה הן קטנות מן ה... יכול להיות שהיא פה בפינה, החלון הזה הוא פה בפינה ואנחנו לא רואים אותו. אז בואו נגיד לו מבחינת הקואורדינטות, זה סטייל לא מהיר, אבל זה x, y, בואו נגיד לו 10, 10, ונגיד לו 110, 110. בואו ננסה להחזיר אותו, הוא צורך, ונגיד לו,
נגיד לו עצור, ונגיד לו נסה שוב, וקדימה, קדימה. האם מחשבנו את החלון? עדיין לא טוב תנו לי שנייה אחת לבדוק את זה כמו כן אני אנסה להגיד לו גם update windows אם זה יעבוד ננסה גם להסביר את זה update windows hwnd יפה וננסה או לא רוצה ונעצור ונתחיל שוב וטאק טאק
טאק אם עכשיו נותר חלון לא לא נותר חלון שנייה אחת טוב מה שאני רוצה לנסות בואו נראה רגע מה שאני רוצה לנסות לעשות, בואו נסתכל פה למטה, פה בהמשך יש גם אפילו קריאת וינדו, אבל זו קריאת וינדו רגילה, קלאס, לא מעניין, טייטל, לא מעניין, מה שאומרים פה זה Overlapped Window, בואו ננסה לתת לו את WS Overlapped Window,
ואת ה-H Instance, למרות שהוא יוצא לנו חלון, בואו נגיד לו Overlapped Window, יכול להיות שאין לו גבולות או משהו כזה, אז נגיד לו בסטייל הזה, ווינדו סטייל קו תחתון אוברלאפ ווינדו קונטרול רווח השלם ונשים פה ברייק פוינט ונריץ מחדש ועדיין אין חלון אין צל של חלון יפה בואו ננסה
לתת לו פה אומרים לי שאולי את ה h אינסטאנס בואו ניתן לו את h אינסטאנס יפה אבל את המשתנה h אינסטאנס נגיד לו ארץ מחדש ועדיין אין חלון טוב אני רוצה רגע לבדוק משהו ctrl shift רווח זה אמור להכניס בול תמיד טוב לבדוק אז בואו נראה בול b שווה ל וגם עם ה-update window יש בול בואו נראה אם זה עובד בול b2 שווה ל
וזה יהיה b1 ובואו נגיד לו הרס מחדש בואו נראה מה זה נותן לנו אז v1 נכשל, אהה, ו-b2 מצליח, אבל v1 נכשל, אהה, נג... נו באמת, נו באמת, לא פתאום 0.
אוקיי, show window, אז יש sv, show window, control רווח, יכול להיות שזה בקיצור hide, בטח זה 0, תודה רבה, אמרנו לו hide, אמרנו לו תתחבא, אני יכול להגיד לו תהיה מקסימל, אני יכול להגיד לו כל מיני דברים, אני יכול להגיד לו תהיה נורמלי, בוא נגיד לו תהיה נורמלי, את האבד הזה לא צריך כרגע יפה מאוד וגם את האוברלאפט לדעתי לא צריך כרגע וגם את ה-H-Instance
לא צריך כרגע אם צריך אז תכף נראה וארץ מחדש או תודה רבה הנה החלון חלון משה עכשיו שימו