הנושארה תינכותה :השדח השיג - 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 -