![]() |
|
?תונולח תביבסב תינכות תדבוע ךיא - C/C++ | |
![]() |
|
ישאר דומע | םיניינע ןכות | סינוקא ןד תאמ |
![]() |
תכרעמל הריזחמ איה תמייתסמ תינכותהשכו הלעפהה תכרעמ י"ע תארקנ תינכותהש םיליגר ונא DOS תינכותב תרמוא תאז .םיעוריא תיחנומ איה ונלש תינכותהש םושמ ןיטולחל הנוש הז Windows-ב .הטילשה תא הלעפהה עוריא לכ .(ילאמש רבכע ןצחל לע הציחל ןוגכ) עוריא והשזיא שחרתי רשאכ קר והשמ עצבת ונלש תינכותהש WndProc היצקנופה .ינשה רטמרפב עיפומ עוריאה גוס .וב לפטתש WndProc היצקנופה לא הנפומ שחרתמש החלשנש העדוהמ םלעתהל הצור WndProc היצקנופהשכ .(windowclass) ןולח תקלחמל ןוכנ רתוי וא ןולחל תכייש .העדוהב לדחמ תרירב לופיט תלפטמ רשא DefWindowProc היצקנופב שמתשהל ךרטצת איה ,הלעפהה תכרעממ םשריהל רומא ןולחה .WinMain תישארה היצקנופב תוארוה המכ ףיסוהל ךרטצנ ,ךסמה לע ןולחה תא רייצל ידכב לש (ידוחיי ההזמ) Handle-ה תא םינייצמ ונא וז היצקנופל האירקב .RegisterClassEx היצקנופה י"ע תכרעמב .ןולחה ונייה אל ההזמה אלל .תובוגת ונממ לבקתו תועדוה ול חלשת תכרעמה ,ךכ .תכרעמב ידוחיי ההזמ שי ןולח לכל ונאש תורמל .תונולח רפסמב ןורכיזל םימעפ רפסמ ןעטיהל הלוכי תמייוסמ תינכות .םייוסמ ןולחל תשגל םילוכי .hPrevInstance- ו hInstance םירטמרפה תא ריבסמ הז .ידוחיי ההזמ שי ןולח לכל ,תינכות התוא לע םירבדמ רטמרפה .ידוחיי רפסמ י"ע גצוימ ןורכיזב תינכות לש (instance) קתוע לכ WinMain היצקנופל האירקב ךא יחכונה קתועה תחיתפל םדוקה קתועה תא גצייו Windows לש טיב 16 תינכותב קר שומישה היה hPrevInstance תויעב עונמל ידכ קר וב םישמתשמ) 0 ךרעה תא לבקי אוה דימת ,ןכל .טיב 32 תונכיתב רתוי וב םישמתשמ אל ונא .(תומיאת .(DOS-ב argv חסונ) הדוקפ תרושמ םירטמרפל שמשמ אוה .szCmdLine ארקנ WinMain לש ישילשה רטמרפה .םהב שמתשת תינכותה רשא םינותנ הליכמה תזורחמ ליכמ הז רטמרפ וא ןטקומ היהי אוה םאה .ןולחה תריצי ןפוא לע עדימ ליכמ ,iCmdShow יעיברה רטמרפה ןולחה תא הגיצמ רשא ShowWindow היצקנופל חלשנ ,יוניש אלל ,הזה רטמרפה .'וכו (SW_SHOWNORMAL) ליגר .ךסמה לע םיכיישה םירטמרפ המכ אלמל ךרטצנ ,תכרעמה ןולחה תא םושרל ידכב RegisterClassEx היצקנופל ארקנש ינפל לכות איה ,wndclass טקייבואה תבותכ תא RegisterClassEx היצקנופל םיחלוש ונאש םושמ .wndclass תקלחמל .ולש תודשה לכב שמתשהל :ןולחה לש עקרה עבצ תא ללוכ לשמל םירטמרפה דחא wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); :CreateWindow, ShowWindows, UpdateWindow תויצקנופל ארקנ ,תכרעמה ןולחה תא ונמשרש ירחא hWnd=CreateWindow(szAppName, "tradwin: Press a mousebutton", WS_OVERLAPPEDWINDOW, 0, 0, xScreen, yScreen, NULL, NULL, hInstance, NULL); :CreateWindow לש םירטמרפה HWND CreateWindow( LPCTSTR lpClassName, // תינכותה םש תבותכ LPCTSTR lpWindowName, // ןולחה תרתוכ תבותכ DWORD dwStyle, // ןולחה תחיתפ ןפוא int x, // ןולחה לש הנוילע תילאמש הניפ תדומע int y, // ןולחה לש הנוילע תילאמש הניפ תרוש int nWidth, // ןולח בחור int nHeight, // ןולח הבוג HWND hWndParent, // יחכונה ןולחה תא חתפש םאה ןולח לש Handle HMENU hMenu, // דלי-ןולח לש וא טירפתה לש Handle HANDLE hInstance, // יחכונה ןולחה לש Handle LPVOID lpParam // ןולח-תריצי ינותנ תבותכ ); ןחלוש לדוגל הנווכה yScreen-ו xScreen תא םישנ םא .ןולחה בחורו ךרוא תא םיללוכ יעיבשהו ישישה םירטמרפה .GetSystemMetrics היצקנופהמ םהיכרע תא םילבקמ םה .( 640X480:לשמל) הדובעה האירקה ShowWindow(hWnd, iCmdShow); .םדוק רבסוהש יפכ WinMain-ל וכרד רבעוהש עדימה תא ליכמ iCmdShow רטמרפה .ךסמה לע ןולחה תא גיצת האירקה UpdateWindow(hWnd); .הנווכה המל הארנ כ"חא .ןולחל WM_PAINT תעדוה תחלוש :while-ה תאלול ףוסבל while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } .הילע עדימה לכ תא ליכמה הנבמ איה העדוה .תכרעמה ןמ תולבקתמה תועדוה דבעלו לבקל אוה וז האלול דיקפת הרזח תרזחומו ,TranslateMessage היצקנופה י"ע תמגרותמ ,GetMessage היצקנופה י"ע תלבקתמ העדוהה .DispatchMessage היצקנופה י"ע תכרעמל התייה אל תינכותה ךכו תינכותל תחלשנה העדוה לכ דבעלו רוזחל םילוכי ונייה אל ,האלולה תמייק התייה אל םא .הביבס םישחרתמה םיעוריאל הביגמ :msg-ו iMsg ןיב םילדבהל בל םישל שי אצמנ העדוהה לע עדימה ראש .תכרעמהמ תחלשנה העדוהה גוס תא ליכמ אוהו UINT גוסמ אוה iMsg רטמרפה .lParam-ו wParam םירטמרפב .העדוהה לע היצמרופניאה לכ תא ומצעב ליכמה MSG גוסמ הנבמ אוה msg רטמרפה |