Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.14 KB | None | 0 0
  1. // GRABO Kapitel 3.3
  2. // Demo-Anwendung, zeichnet verschiedene Rechtecke in zwei Farben
  3.  
  4. #include "WinMain.h"
  5.  
  6. // hWnd = Fenster (handle)
  7. // wMessage = Event (INT / Konstante)
  8. LRESULT CALLBACK WndProc (HWND hWnd, UINT wMessage,
  9.                           WPARAM wParam, LPARAM lParam)
  10. {
  11.     // Zustandsvariable des Fensters, Lebensdauer beachten!
  12.     static POINT m;                 // Clientmitte
  13.     static POINT p;                 // markierter Punkt
  14.     static int cyan = FALSE;        // Initialisierung zwingend
  15.  
  16.     switch (wMessage) {             // Messageverteilung
  17.  
  18.         // Fenstererzeugung
  19.         case WM_CREATE: {
  20.             RECT innen;                 // Rechteck
  21.             GetClientRect(hWnd, &innen);// Größe Client-Area von hWnd ermitteln und in innen speichern
  22.             m.x = innen.right/2;        // Rechteck immer ab Clientmitte
  23.             m.y = innen.bottom/2;
  24.             p.x = m.x + 1;              // Rechteck erst nur ein Pixel
  25.             p.y = m.y + 1;
  26.            
  27.             return 0;
  28.         }
  29.    
  30.         // Sichtbarkeitsänderung
  31.         case WM_PAINT: {
  32.             HDC hDC;                    // Kontexthandle für Fenster
  33.             PAINTSTRUCT ps;             // Datenstruktur für BeginPaint
  34.             HPEN hPen;
  35.             hDC = BeginPaint (hWnd, &ps);
  36.             if (cyan) {
  37.                 hPen = CreatePen(PS_SOLID, 0, RGB(0,255,255)); // Pen cyan
  38.                 SelectObject(hDC, hPen);
  39.             }
  40.             Rectangle(hDC, m.x, m.y, p.x, p.y); // Rechteck zeichnen
  41.             EndPaint (hWnd, &ps);
  42.             if (cyan) DeleteObject(hPen); // erst wenn nicht in Kontext
  43.            
  44.             return 0;
  45.         }
  46.    
  47.         // Druck auf LINKE Maustaste
  48.         case WM_LBUTTONDOWN: {         // Rechteckgröße ändern
  49.             p.x = LOWORD(lParam);       // Ermitteln Mauskoordinaten
  50.             p.y = HIWORD(lParam);
  51.             InvalidateRect(hWnd, NULL, TRUE); // WM_PAINT erzeugen
  52.            
  53.             return 0;
  54.         }
  55.  
  56.         // Druck auf RECHTE Maustaste
  57.         case WM_RBUTTONDOWN: {         // Rechteckfarbe ändern
  58.             cyan = !cyan;
  59.             InvalidateRect(hWnd, NULL, TRUE); // Event von Typ WM_PAINT erzeugen
  60.            
  61.             return 0;
  62.         }
  63.    
  64.         // Hauptfenster der Anwedung wird geschlossen
  65.         case WM_DESTROY: {
  66.             PostQuitMessage(0);         // WM_QUIT erzeugen
  67.      
  68.             return 0;    
  69.         }
  70.   } // end switch
  71.  
  72.     return DefWindowProc (hWnd, wMessage, wParam, lParam);
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement