WinAPI - Das Child-Fenster

Webdesigner's
Verfügbare Informationen zu "WinAPI - Das Child-Fenster"

  • 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 - Das Child-Fenster
  • Letzte Antwort: vor 16 Jahren, 9 Monaten, 1 Tag, 11 Stunden, 3 Minuten
  • Alle Beiträge und Antworten zu "WinAPI - Das Child-Fenster"

    Re: WinAPI - Das Child-Fenster

    Snowball - 24.07.2007, 10:45

    WinAPI - Das Child-Fenster
    in diesem Tutorial möchte ich euch zeigen, wie ein Child-fenster Funktioniert. Ein Child fenster ist ein fenster in einem anderen fenster, woe die beiden fenster miteinander agieren können! ich selber habe dieses programm nur mit dem Compiler "Microsoft Visual C++ 2005 Express edition" getestet, also falls es bei euch nicht geht, kann es daran liegen das ihr den falschen Compiler benutzt, aber eigentlich sollte alles funktionieren, sofern ihr WinAPI installiert habt!

    kommen wir aber nun zum Quellcode! Wie man sehen kann ist er in WinAPI geschrieben, also ist die Voraussetzung das ihr WinAPI installiert habt.

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

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

    const char szChildName[] = "Farbtabelle";
    const UINT PM_COLORCHANGED = WM_APP + 1;

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                       PSTR szCmdLine, int iCmdShow)
    {
       MSG        msg;
       HWND       hWnd;
       WNDCLASS   wc;
       
       char       szAppName[] = "Das Child Window";
       
       wc.cbClsExtra          = 0;
       wc.cbWndExtra          = 0;
       wc.hbrBackground       = (HBRUSH) GetStockObject(WHITE_BRUSH);
       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.hbrBackground       = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
       wc.hIcon               = NULL;
       wc.lpfnWndProc         = ChildProc;
       wc.lpszClassName       = szChildName;
       
       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    hChild;
       static RECT    rect;
       static int     iColor = RGB(255, 255, 255);
       
       switch (message)
       {
       case WM_CREATE:
          {
             GetClientRect(hWnd, &rect);

     hChild = CreateWindow(  szChildName,
                                     NULL,
                                     WS_CHILD | WS_VISIBLE | WS_DLGFRAME,
                                     5,
                                     rect.bottom - 35,
                                     rect.right - 10,
                                     30,
                                     hWnd,
                                     NULL,
                                     ((LPCREATESTRUCT) lParam)->hInstance,
                                     NULL);
             return 0;
          }
       case WM_SIZE:
          {

             rect.right  = LOWORD(lParam);
             rect.bottom = HIWORD(lParam);
             
             MoveWindow(hChild, 5, rect.bottom - 35, rect.right - 10, 30, TRUE);
             
             return 0;
          }

          case PM_COLORCHANGED:
          {
             iColor = wParam;
             InvalidateRect(hWnd, NULL, FALSE);
             return 0;
          }

         case WM_PAINT:
          {
             PAINTSTRUCT    ps;
             HDC            hDC;
             
             hDC = BeginPaint(hWnd, &ps);
             {
                HBRUSH hOldBrush = (HBRUSH) SelectObject(hDC,
                                                  CreateSolidBrush(iColor));
               
                Rectangle(hDC, 0, 0, rect.right, rect.bottom);
               
                DeleteObject(SelectObject(hDC, hOldBrush));
             }
             EndPaint(hWnd, &ps);
             return 0;
          }
       case WM_DESTROY:
          {
             PostQuitMessage(0);
             return 0;
          }
       }
       
       return DefWindowProc(hWnd, message, wParam, lParam);
    }

    LRESULT CALLBACK ChildProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
       static RECT    rect;
       static int     iAnzFarben;
       const  int     iKasten        = 12;
       const  int     iKastenOffset  = 15;
       
       switch (message)
       {

          case WM_SIZE:
          {
             rect.right  = LOWORD(lParam);
             rect.bottom = HIWORD(lParam);
             iAnzFarben  = (rect.right / iKastenOffset) - 2;
             
             return 0;
          }

         case WM_LBUTTONDOWN:
          {
             for (int i = 0; i < iAnzFarben; i++)
             {
                if (15 + i * iKastenOffset                  <= LOWORD(lParam) &&
                    15 + i * iKastenOffset + iKasten        >= LOWORD(lParam) &&
                    rect.bottom / 2 - iKasten / 2           <= HIWORD(lParam) &&
                    rect.bottom / 2 - iKasten / 2 + iKasten >= HIWORD(lParam))
                {
                   int iColor = 255 * i / (iAnzFarben - 1);
                   SendMessage(GetParent(hWnd), PM_COLORCHANGED,
                               RGB(iColor, iColor, iColor), 0);
                   return 0;
                }
             }
             return 0;
         }

         case WM_PAINT:
          {
             HDC          hDC;
             PAINTSTRUCT  ps;
             
             hDC = BeginPaint(hWnd, &ps);
             {
                for (int i = 0; i < iAnzFarben; i++)
                {
                   int    iColor    = 255 * i / (iAnzFarben - 1);
                   HBRUSH hOldBrush = (HBRUSH) SelectObject(hDC,
                                      CreateSolidBrush(RGB(iColor, iColor, iColor)));
                   Rectangle(hDC,  15 + i * iKastenOffset,
                                   rect.bottom / 2 - iKasten / 2,
                                   15 + i * iKastenOffset + iKasten,
                                   rect.bottom / 2 - iKasten / 2 + iKasten);
                   DeleteObject(SelectObject(hDC, hOldBrush));
                }
             }
             EndPaint(hWnd, &ps);
             return 0;
          }
       }
       return DefWindowProc(hWnd, message, wParam, lParam);
    }


    Wenn ihr das debug nun startet, seht ihr ein Windows fenster voreuch und unten eine farbpallette in schwartz weiß Tönen. Wenn ihr nun auf eines der farben in der farbpalette klickt, seht ihr wie sich die farbe vom Cildfenster ändert. falls dieses programm beie cuh nicht gehen sollte, kann das daran liegen das ihr WinAPI noch nicht installiert habt oder in den Projekt Eigenschaften den zeichensatz noch nicht auf "nicht festgelegt" umgestellt habt! Fragen könnt ihr natürlich wie üblich im WinAPI Forum stellen!



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



    Weitere Beiträge aus dem Forum Webdesigner's

    WinAPI - Sachen kombinieren - gepostet von Snowball am Donnerstag 26.07.2007
    Fertiges Script: Variable prüfung - gepostet von Snowball am Freitag 20.07.2007



    Ähnliche Beiträge wie "WinAPI - Das Child-Fenster"

    Dämliche Pop-Up-Fenster... - Black Dog (Freitag 05.05.2006)
    Child goes crazy - Vendruxs (Montag 13.11.2006)
    Destinys Child - Destinys Child (Samstag 20.10.2007)
    Abu Dhabi: Weil Frau aus dem Fenster schaute - Vom Ehemann t - tracekill (Mittwoch 27.07.2005)
    Super tolle 61'T1 Pritsche mit Safari Fenster - Buck Trail (Donnerstag 08.11.2007)
    Angry Child - Sir. Stollnik (Donnerstag 22.06.2006)
    Fenster Modus funztz net -.- - .:Rox:. (Dienstag 20.03.2007)
    Wasser zwischen Balkon-Fenster/Tür und Verkleidung - Alex Hospodka (Dienstag 02.10.2007)
    Child Care On Post - Dani (Mittwoch 18.10.2006)
    God Child - Li-Yaan (Dienstag 23.08.2005)