Verfügbare Informationen zu "WinAPI - Der Farbmischer"
Qualität des Beitrags: 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:00WinAPI - 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)