WinAPI - Der Farbmischer

Webdesigner's
Verfügbare Informationen zu "WinAPI - Der Farbmischer"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Snowball
  • Forum: Webdesigner's
  • Forenbeschreibung: Das Hilfe Forum für alle Webdesigner
  • aus dem Unterforum: Tutorial C++
  • Antworten: 1
  • Forum gestartet am: Freitag 20.07.2007
  • Sprache: deutsch
  • Link zum Originaltopic: WinAPI - Der Farbmischer
  • Letzte Antwort: vor 16 Jahren, 9 Monaten, 1 Tag, 8 Stunden, 52 Minuten
  • Alle Beiträge und Antworten zu "WinAPI - Der Farbmischer"

    Re: WinAPI - Der Farbmischer

    Snowball - 24.07.2007, 11:00

    WinAPI - Der Farbmischer
    in diesem tutorial will ich euch zeigen wie man farben miteinander mischen kann, bezihungsweise wie man mehrere Childfenster gleichzeitig benutzen kann. ich selber habe diesen Quellcode nur mit dem Compiler "Microsoft Visual C++ 2005 express Edition" getestet, falls diese Anwendung bei euch also nicht geht, kann das daran liegen das ihr den falschen Compiler benutz, aber wenn ihr WinAPI richtig installiert habt, sollte alles wunderbar klappen!

    kommen wir aber nun zu dem Quellcode:

    Code: #include <windows.h>
    #include "stdafx.h"

    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK CheckProc(HWND, UINT, WPARAM, LPARAM);

    const char szCheckName[]   = "OwnCheck";
    const UINT PM_CHECKED      = WM_APP + 1;
    const UINT PM_COLOR        = WM_APP + 2;
    const UINT PM_ISCHECKED    = WM_APP + 3;

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                       PSTR szCmdLine, int iCmdShow)
    {
       MSG        msg;
       HWND       hWnd;
       WNDCLASS   wc;

       const char szAppName[] = "Ein Child mit Gedächtnis";

       wc.cbClsExtra          = 0;
       wc.cbWndExtra          = 0;
       wc.hbrBackground       = NULL;
       wc.hCursor             = LoadCursor(NULL, IDC_ARROW);
       wc.hIcon               = LoadIcon(NULL, IDI_APPLICATION);
       wc.hInstance           = hInstance;
       wc.lpfnWndProc         = WndProc;
       wc.lpszClassName       = szAppName;
       wc.lpszMenuName        = NULL;
       wc.style               = CS_HREDRAW | CS_VREDRAW;

       RegisterClass(&wc);

          wc.cbWndExtra          = 2 * sizeof(int);
       wc.hIcon               = NULL;
       wc.lpfnWndProc         = CheckProc;
       wc.lpszClassName       = szCheckName;
       
       RegisterClass(&wc);
       
       hWnd = CreateWindow(  szAppName,
                             szAppName,
                             WS_OVERLAPPEDWINDOW,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             NULL,
                             NULL,
                             hInstance,
                             NULL);
       
       ShowWindow(hWnd, iCmdShow);
       UpdateWindow(hWnd);
       
       while (GetMessage(&msg, NULL, 0, 0))
       {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
       }
       
       return msg.wParam;
    }

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {

    static HWND   hR, hG, hB;
       static RECT   rect;
       
       switch (message)
       {
       case WM_CREATE:
          {

            hR = CreateWindow(  szCheckName,
                                 NULL,
                                 WS_CHILD | WS_VISIBLE | WS_DLGFRAME,
                                 0, 0, 0, 0,
                                 hWnd,
                                 NULL,
                                 ((LPCREATESTRUCT) lParam) -> hInstance,
                                 NULL);

             hG = CreateWindow(  szCheckName,
                                 NULL,
                                 WS_CHILD | WS_VISIBLE | WS_DLGFRAME,
                                 0, 0, 0, 0,
                                 hWnd,
                                 NULL,
                                 ((LPCREATESTRUCT) lParam) -> hInstance,
                                 NULL);

             hB = CreateWindow(  szCheckName,
                                 NULL,
                                 WS_CHILD | WS_VISIBLE | WS_DLGFRAME,
                                 0, 0, 0, 0,
                                 hWnd,
                                 NULL,
                                 ((LPCREATESTRUCT) lParam) -> hInstance,
                                 NULL);

             SendMessage(hR, PM_COLOR, RGB(255, 0, 0), 0);
             SendMessage(hG, PM_COLOR, RGB(0, 255, 0), 0);
             SendMessage(hB, PM_COLOR, RGB(0, 0, 255), 0);
             return 0;
          }

       case WM_SIZE:
          {
             rect.right  = LOWORD(lParam);
             rect.bottom = HIWORD(lParam);

           MoveWindow(hR, rect.right / 2 - 60, rect.bottom - 30, 30, 20, TRUE);
             MoveWindow(hG, rect.right / 2 - 15, rect.bottom - 30, 30, 20, TRUE);
             MoveWindow(hB, rect.right / 2 + 30, rect.bottom - 30, 30, 20, TRUE);

             return 0;
          }

       case WM_PAINT:
          {
             PAINTSTRUCT    ps;
             HDC            hDC;

             hDC = BeginPaint(hWnd, &ps);
             {

               HBRUSH hOldBrush = (HBRUSH) SelectObject(hDC,
                                      CreateSolidBrush(RGB(
                                         SendMessage(hR, PM_ISCHECKED, 0, 0)*255,
                                         SendMessage(hG, PM_ISCHECKED, 0, 0)*255,
                                         SendMessage(hB, PM_ISCHECKED, 0, 0)*255)));
               
                Rectangle(hDC, rect.left, rect.top, rect.right, rect.bottom);
               
                DeleteObject(SelectObject(hDC, hOldBrush));
             }
             EndPaint(hWnd, &ps);
             
             return 0;
          }

         case PM_CHECKED:
          {
             InvalidateRect(hWnd, NULL, FALSE);
             return 0;
          }

       case WM_DESTROY:
          {
             PostQuitMessage(0);
             return 0;
          }
       }

       return DefWindowProc(hWnd, message, wParam, lParam);
    }

    LRESULT CALLBACK CheckProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
       switch (message)
       {

          case WM_CREATE:
          {
             SetWindowLong(hWnd, 0, 0);
             SetWindowLong(hWnd, sizeof(int), RGB(191, 191, 191));
             return 0;
          }

            case PM_COLOR:
          {
             SetWindowLong(hWnd, sizeof(int), wParam);
             InvalidateRect(hWnd, NULL, FALSE);
             
             return 0;
          }

       case WM_PAINT:
          {
             PAINTSTRUCT   ps;
             HDC           hDC;
             
             hDC = BeginPaint(hWnd, &ps);
             {

               HBRUSH hOldBrush = (HBRUSH) SelectObject(hDC,
                                              CreateSolidBrush(
                                                GetWindowLong(hWnd, sizeof(int))));
               
                Rectangle(hDC, -1, -1, 25, 15);
               
                DeleteObject(SelectObject(hDC, hOldBrush));
               
                Rectangle(hDC, 6, 1, 18, 13);
                if (GetWindowLong(hWnd, 0))
                {
                   MoveToEx(hDC, 6, 1, NULL);
                   LineTo(hDC, 17, 12);
                   MoveToEx(hDC, 6, 12, NULL);
                   LineTo(hDC, 17, 1);
                }
             }
             EndPaint(hWnd, &ps);
             
             return 0;
          }

          case WM_LBUTTONDOWN:
          {
             if (LOWORD(lParam)  >=  6   &&
                 LOWORD(lParam)  <   18  &&
                 HIWORD(lParam)  >=  1   &&
                 HIWORD(lParam)  <   13)
             {
                SetWindowLong(hWnd, 0, !GetWindowLong(hWnd, 0));
                SendMessage(  GetParent(hWnd), PM_CHECKED,
                              GetWindowLong(hWnd, 0), (LPARAM)hWnd);
                InvalidateRect(hWnd, NULL, FALSE);
             }
             return 0;
          }

         case PM_ISCHECKED:
          {
             return GetWindowLong(hWnd, 0);
          }
       }
       
       return DefWindowProc(hWnd, message, wParam, lParam);
    }

    Wenn ihr den Debug startet seht ihr nun Vier fenster ..., also ein hauptfenster und 3 Child-Fenster. wenn ihr nun von den untigen 3 Child-fenstern ein paar anklickt, mischen sich die farben im hauptfenster! falls das programm nicht laufen sollt, kann es daran liegen das ihr WinAPI noch nicht installiert habt oder in den projekt eigenschaften den zeichensatz noch nicht auf "nicht festgelegt" eingestellt habt! fragen könnt ihr natürlich wie üblich im WinAPI bereich stellen!



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Webdesigner's



    Ähnliche Beiträge wie "WinAPI - Der Farbmischer"

    WinAPI - Bilder anzeigen - Snowball (Mittwoch 25.07.2007)
    WinAPI - Mouse einbinden - Snowball (Dienstag 24.07.2007)
    WinAPI - Mouse Bewegung - Snowball (Dienstag 24.07.2007)
    WinAPI - Texte im Child-fenster anzeigen - Snowball (Dienstag 24.07.2007)
    WinAPI - Windows Button einfügen - Snowball (Dienstag 24.07.2007)
    WinAPI - Das Child-Fenster - Snowball (Dienstag 24.07.2007)
    WinAPI - Vollbild modus - Snowball (Dienstag 24.07.2007)
    WinAPI - Nachrichten Anzeigen - Snowball (Dienstag 24.07.2007)
    WinAPI - Sachen kombinieren - Snowball (Donnerstag 26.07.2007)
    WinAPI - WinAPI Installieren - Snowball (Sonntag 22.07.2007)