Zeichnen



  • Ich hab eigentlich keine Ahnung. Ich will eine Fläche, und drauf ein Koordinatensystem. Aber schon mit der Fläche gibts Probleme. Wenn ein anderes Fenster drübergezogen wird, dann wird die Fläche, die vorher weiß war, grau und bleibt so, auch beim neu Zeichnen.

    HDC hdc;
    PAINTSTRUCT ps;
    HBRUSH brush = CreateSolidBrush (WHITE);
    static HPEN Pen;
    HGDIOBJ hObj;
    
    hdc = BeginPaint(hWnd, &ps);
    {
        Pen = CreatePen(PS_SOLID, 0, BLACK);
    
        hObj = SelectObject (hdc, Pen);
    
        /* y - Linien */
        MoveToEx (hdc, START_X, START_Y, NULL);
        LineTo (hdc, START_X, START_Y + S_HOEHE);
        MoveToEx (hdc, START_X + S_BREITE, START_Y, NULL);
        LineTo (hdc, START_X + S_BREITE, START_Y + S_HOEHE);
    
        /* x - Linien */
        MoveToEx (hdc, START_X, START_Y, NULL);
        LineTo (hdc, START_X + S_BREITE, START_Y);
        MoveToEx (hdc, START_X, START_Y + S_HOEHE, NULL);
        LineTo (hdc, START_X + S_BREITE, START_Y + S_HOEHE);
    
        DeleteObject (hObj); 
    
        /* Fläche füllen */
        hObj = SelectObject (hdc, brush);
        ExtFloodFill (hdc, START_X + 1, START_Y + 1, BLACK, FLOODFILLBORDER);
        DeleteObject (hObj);
    }
    EndPaint(hWnd, &ps);
    

    Außerdem wärs nett, wenn mir mal jemand die Grundlagen des Zeichnens erläutern könntem, oder mir n tut gibt. Ich hab das oben nämlich alles aus Beiträgen im Forum zusammengeschnipselt...

    mfg, N00Bie

    <EDIT>
    #define START_X 10
    #define START_Y 20
    #define S_BREITE 580
    #define S_HOEHE 520
    #define WHITE RGB(255,255,255)
    #define BLACK RGB(0,0,0)
    </EDIT>



  • 1.) Wo hast du diesen Code stehen - in WM_PAINT?
    2.) Zu SelectObject gehört fast immer ein SelectObject mit dem Rückgabewert des ersten Aufrufs und ein DeleteObject
    3.) http://www.henkessoft.de/WinAPI_7_GDI.htm



  • cool, danke flenders. jap, der code steht in WM_PAINT.



  • und was mach ich, wenn ich nicht beim Öffnen der Anwendung, sondern mitten drin zeichnen will? Die Stellen, an die ich dann nachträglich ändere (zB Werte wie Strihlänge, etc...) funzen dann nicht mehr. Gibts da ne Lösung?
    mfg, N00Bie



  • InvalidateRect



  • hä? kannste des bitte erläutern? ich habs in der msdn nachgeschlagen, komm aber auf keinen grünen zweig.



  • Wenn du InvalidateRect entsprechend aufrufst wird doch dein Fenster neu gezeichnet (bekommt eine WM_PAINT Nachricht) - was verstehst du nicht 😕



  • kann ich nicht einfach ne WM_PAINT schicken?



  • ok, jetzt funzts, danke, flenders! 🙂



  • N00Bie schrieb:

    kann ich nicht einfach ne WM_PAINT schicken?

    Nein! In der MSDN-Library steht nämlich:

    The WM_PAINT message is generated by the system and should not be sent by an application.


Anmelden zum Antworten