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 kann

    Es gibt auch Edding Stifte, die auf Glas haften.
    Sogar in vielen bunten Farben. 🙂


Anmelden zum Antworten