Gdiplus: Es wird nicht gezeichnet bei: Maximieren, oder wenn überdeckendes Fenster minimiert wird



  • Hi!

    Ich habe einen Dialog mit CreateDialogParam() erstellt. Auf diesem befindet sich ein Static Control.
    Nun zeichne ich bei WM_PAINT mit Gdiplus in diesen Control.

    case WM_PAINT:
        {
            if(inited)
            {
                RenderSmallPicture();
                return false;
            }
        }
    
    ...
    
    // RenderSmallPicture
    
    Gdiplus::Color clearColor(255, 224, 255, 227);
    
    if(smallPictureCanvas->Clear(clearColor) == Gdiplus::Ok)
        Beep(500, 100);
    

    Es funktioniert beim Start, und wenn man das Fenster (und auch das Static Control) über den Bildschirmrand hinaus- und wieder hineinbewegt, aber es gibt zwei Ausnahmen:

    Wenn das Fenster maximiert wird, wird nicht ins Control gezeichnet.
    Und wenn über meinem Fenster ein anderes liegt, und ich dieses minimiere, wird auch nicht gezeichnet!

    Wenn ein überdeckendes Fenster über dem Static Control hin- und weggezogen wird, wird aber gezeichnet.

    In jedem Fall ertönt ein Beep!

    😕



  • Ich glaub du musst da etwas genauer sein, wenn ein Fenster deinen Dialog kurzeitig überdeckt ist er danach leer? oder nur der Inhalt des Controls?

    einfachste Lösung: wahrscheinlich hast du nen fehler bei der definition gemacht, nimm einfach einen modalen doalog, wenns dir unbedingt darum geht, dass er moduslos ist, musst du ihn auch so behandeln...

    ansonsten: das größenproblem:

    case WM_SIZE:
            InvalidateRect(hDialog, NULL, TRUE);
    

    müsste eigentlich aber auch so funktionieren



  • einfach bei allen möglichen wind00f messages die iwas mit zeichnen oder verschieben vergrößern etc zutun haben solange InvalidateRects reinballern bisses funzt 😃

    ゆっくりしていてね



  • Ich rufe RenderSmallPicture() nun einfach in der message loop auf, dann gibts keine Probleme. Ist sowieso nur ein Programm für mich. Trotzdem wüsste ich gerne, wie man es besser macht.

    "Gdiplus::Graphics smallPictureCanvas" hat den DC eines static controls meines Fensters.

    Es wird reingezeichnet, also die client area des static controls wird grünlich gezeichnet. So soll es auch sein.

    Ist nun irgendein (fremdes) Fenster über dem static control und wird wieder weggeschoben, wird ins static control neu gezeichnet. Passt.

    Ist nun irgendein (fremdes) Fenster über dem static control und wird nun aber minimiert, bleibt das static control grau, es wird also nicht gezeichnet.

    Mit WM_SIZE dürfte das nicht gelöst sein.

    Und wenn ich mein Fenster mit dem static control minimiere und anschließend wieder maximiere, bleibt das static control auch grau, es wird also wieder nicht gezeichnet.

    Da könnte WM_SIZE helfen, kann ich ja noch testen, wenn das vorige Problem auch beseitig werden kann.

    Und es ist das Hauptfenster des Programmes, also muss es ein modeless dialog sein.

    In den Fällen, wo das static control grau bleibt, ertönt aber, wie schon gesagt, der beep.

    @r4mb0
    klar 😃


Anmelden zum Antworten