![]() |
|
הנושארה תינכותה :השדח השיג - C/C++ | |
![]() |
|
ישאר דומע | םיניינע ןכות | סינוקא ןד תאמ |
![]() |
.ןושארה רועישב ונבתכש הנושארה תינכותל תבחרומ תינכות בותכנ ,השדחה השיגב הנושאר תינכותכ תרתוכב "רבכעה ןצחל לע ץחל" תארוה תא םושרל םוקמב םעפה ךא WndProc תרודצורפ התואב שמתשנ .WM_PAINT העדוהה תא דבענ ,ןכ ומכ .(Client area) ןולחה ףוגב התוא םושרנ ,ןולחה :םירבסהה ןכמ רחאלו winapp.cpp תינכותה הנה //winapp.cpp: A Windows-program that uses TextOut. // Link with win.cpp #include "win.h" #include <stdio.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { win w(hInstance, iCmdShow, "winapp", "winapp: First program with short WinMain-function"); return w.result(); } LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch(iMsg) { case WM_PAINT: { PAINTSTRUCT ps; HDC hDC = BeginPaint(hWnd, &ps); static int counter = 0; char buf[100]; sprintf(buf, "There is %d times a WM_PAINT-message called.", ++counter); TextOut(hDC, 30, 30, buf , strlen(buf)); sprintf(buf, "Push a mousebutton, or resize the window."); TextOut(hDC, 30, 50, buf, strlen(buf)); EndPaint(hWnd, &ps); return 0; } case WM_LBUTTONDOWN: MessageBox(hWnd, "Leftmousebutton pressed", "", MB_OK); return 0; case WM_RBUTTONDOWN: MessageBox(hWnd, "Rightmousebutton pressed", "", MB_OK); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, iMsg, wParam, lParam); } :ךכ win.obj רדוהמה ץבוקה ץוריצב ונלש השדחה תינכותה תא רדהנ וישכע Borland C++ 5.0-ב bcc32 -W winapp win.obj Microsoft Visual C++ 5.0-ב cl /c winapp.cpp link winapp.obj win.obj user32.lib gdi32.lib :תינכותה לע רבסה הארמ ןולחה ףוגב הנושארה הרושה .ןושארה רועישב ונתינכותב רשאמ רחא טסקט וישכע הארמ ןולחה תרתוכ רבכעה ןצחל לע ץוחלל שמתשמהמ תשקבמ הינשה הרושה .ונלש תינכותל החלשנ WM_PAINT העדוהה םימעפ המכ .ןולחה לדוג תא תונשל וא ![]() WM_PAINT העדוהה העדוהה החלשנ םימעפ המכ ונל רמואש רפסמה םעפה ךא בוש הנעפות תורושה ,רוזחנו ןולחה תא בוזענשכ הנתשמהש םושמ תאז .ןולחה לדוג תא הנשנ רשאכ םג הרקי רבדה .1-ב הלעי ונלש תינכותל WM_PAINT תעדוה חולשל תכרעמל רמוא רשא CS_VREDRAW | CS_HREDRAW ךרע לעב אוה wndclass.style לבקת WndProc היצקנופה .(הבוג תניחבמ וא בחור תניחבמ) הנתשמ ןולחה לדוגש םעפ לכב WM_PAINT היצקנופה םעפה ךא הנושארה ונתינכותב םג הרק הז רבד .WM_PAINT עובקה ךרע תא iMsg רטמרפב .DefWindowProc היצקנופה לש לדחמ תרירב לופיטל התוא תחלוש אלו העדוהב המצעב תלפטמ WndProc .ןולחה ףוגב תורושה תביתכ אוה העדוהב לופיטה םעפה TextOut היצקנופהו (Device-context) יעצמא-רשקה םצעב אוהש יעצמא-רשקה לש Handle-ה תא ךרטצנ ,תובר טלפ תויצקנופ דועו TextOut היצקנופב שמתשהל ידכב .ההזמ יעצמאהש םלש רפסמ אוה יעצמא-רשקה לש Handle .(ךסמ) טלפה יעצמאל תפדרנ הלימ העדוהה תא םידבעמ ונאשכ hDC הנתשמ ךותל יעצמא-רשקה לש Handle-ה תא לבקל רשפא ךיא הארנ ןאכ .WM_PAINT case WM_PAINT: { PAINTSTRUCT ps; HDC hDC = BeginPaint (hWnd, &ps); ... TextOut(hDC, 30, 30, buf, strlen(buf)); ... EndPaint(hWnd, &ps); return 0; } האירקב וב שמתשהלו עדימ וב םישל ידכב PAINTSTRUCT סופיטהמ ps רטמרפ לבקל הכירצ BeginPaint היצקנופה לכונ אל ,ןכ ומכ .BeginPaint היצקנופה רחאל EndPaint היצקנופל אורקל םיבייח ונא .EndPaint היצקנופל :הלוספ האבה אמגודה ןכל .EndPaint-ו BeginPaint-ל האירק אלל WM_PAINT העדוהה תא דבעל case WM_PAINT: return 0; תומוקמב ךרטצנ רשאכ .WM_PAINT העדוהב לופיט י"ע קר וארקיי EndPaint-ו BeginPaint תויצקנופהש דאמ בושח .רתוי רחואמ ורבסויש ,ReleaseDC-ו GetDC תויצקנופב שמתשהל לכונ ,והשלכ יעצמא-רשקה לש Handle-ה תא םירחא :םה TextOut לש םירטמרפה יעצמא-רשקה לש Handle-ה hDC - .(לאמשמ) x הטנידראוק x - .(הלעמלמ) y הטנידראוק y - .גיצנ ותוא טסקטה text - .טסקטה לש (םיותב) ךרואה length - |