malen
-
Hallo ich habe ein problem -
wie ghet das das ich in ein Fenster SELBER malen kann
-
so du malermeister

#include <windows.h> LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); LPCSTR MainClassName = "Zeichnen"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { WNDCLASSEX wc; MSG wmsg; HWND hWnd; wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(GetModuleHandle(NULL), IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_CROSS); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName = MainClassName; wc.lpszClassName = MainClassName; wc.hIconSm = LoadIcon(GetModuleHandle(NULL), IDI_APPLICATION); if(!RegisterClassEx(&wc)) { MessageBox(NULL, "Windows Registrations Fehler", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0; } hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, MainClassName, "Gerätekontext Beispiel", WS_SYSMENU | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL); if(hWnd == NULL) { if(MessageBox(NULL, "Fehler beim Erstellen des Fensters!", "Error!", MB_ICONEXCLAMATION | MB_OK) == IDOK) return 0; } while(GetMessage(&wmsg,NULL,0,0)) { TranslateMessage(&wmsg); DispatchMessage(&wmsg); } return wmsg.wParam; } LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { static int x1=-1,y1=-1,x2=-1,y2=-1; HDC hdc; PAINTSTRUCT ps; HPEN pen = CreatePen( PS_SOLID, 4, RGB(255, 0, 0 )); switch (uMsg) { case WM_PAINT : hdc=BeginPaint(hWnd, &ps); SelectObject(hdc, pen); MoveToEx(hdc,x1,y1, NULL); LineTo(hdc,x2,y2); DeleteObject(pen); EndPaint(hWnd, &ps); return 0; case WM_MOUSEMOVE : x1=x2; //für MoveToEx y1=y2; //für MoveToEx x2=LOWORD(lParam); //neue x-Position y2=HIWORD(lParam); //neue y-Postion //nur Zeichnen, wenn linker Button gedrückt ist if(wParam & MK_LBUTTON) InvalidateRect(hWnd, NULL, FALSE); return 0; //rechte Maustaste->Bildschirm löschen case WM_RBUTTONDOWN : x1=x2=y1=y2=-1; InvalidateRect(hWnd, NULL, TRUE); break; case WM_DESTROY : PostQuitMessage(0); break; default : return( DefWindowProc( hWnd, uMsg, wParam, lParam ) ); } return( 0L ); }
-
Indem du ein Fenster öffnest und darin malst!!
Dazu kannst du die WM_PAINT Message abfangen und mit BeginPaint / EndPaint und den GDI Funktionen z.B. FillRect, SetPixel, LineTo MoteTo(Ex) etc.. dann malst..Beispiel (Window Procedure):
LRESULT CALLBACK WinProc(HWND hWnd, UINT msg, LPARAM lParam, WPARAM wParam){ switch(msg): case WM_PAINT: { PAINTSTRUCT ps; BeginPaint(hWnd, &ps); PaintDesktop(ps.hdc); EndPaint(hWnd, &ps); }break; default: { return DefWindowProc(hWnd, msg, lParam, wParam); } }
-
malmax schrieb:
Hallo ich habe ein problem -
wie ghet das das ich in ein Fenster SELBER malen kannEs gibt auch Edding Stifte, die auf Glas haften.
Sogar in vielen bunten Farben.