verstaendnix problem mit wm_paint



  • hallo leute

    hab bis jetzt eigendlich guis nur mit dem bcb erstellt und will nun mal mich mit der winapi probieren.
    das neuzeichnen wird ja mit der wm_paint eingeleitet. muss ich nun alles grafische und texte im case-teil von wm_paint machen ? das wird dann ja elendslang.
    und wenn ich zum beispiel ein apfelmaennchen dabei habe, kann ich das doch nicht immer neu berechnen lassen. das dauert dann doch etwas zu lange, wie mir scheint.
    wenn z.b. ein kleiner bereich fuer ungueltig erklaert wird, muss da dann auch wieder alles neu gezeicnet werden ? oder wie weiß ich, was ich da neu zeichnen muss ?

    Meep Meep



  • muss ich nun alles grafische und texte im case-teil von wm_paint machen

    Ja, nur was in WM_PAINT gezeichnet wird bleibt dauerhaft sichtbar.

    das wird dann ja elendslang.

    Naja, kommt drauf an was dargestellt werden soll, Controlls zeichnen sich ja z.B. selbst

    und wenn ich zum beispiel ein apfelmaennchen dabei habe, kann ich das doch nicht immer neu berechnen lassen. das dauert dann doch etwas zu lange, wie mir scheint.

    das würde man, natürlich nur einmal, in ein Speicherbitmap zeichnen und das Speicherbitmap dann bei WM_PAINT immer auf den Bildschirm zeichnen

    wenn z.b. ein kleiner bereich fuer ungueltig erklaert wird, muss da dann auch wieder alles neu gezeicnet werden

    es muss nur der Bereich neu gezeichnet werden, der auch ungültig ist, der Rest wird von Windows eh weggeclippt (das Beschränken auf den ungültigen Breich ist, je nach Ausgabe, aber eher Umständlich und lohnt sich (meist) nicht)

    oder wie weiß ich, was ich da neu zeichnen muss ?

    In der PAINTSTRUCT, die von BeginPaint ausgefüllt wird ist ein RECT gespeichert, innerhalb von diesem liegt der ungültige Bereich.



  • Wenn man's genauer haben will, kann man auch die Update-Region des Fensters abfragen und in einem Array von Rechtecken auslesen. Den Namen der Funktion weiss ich jetzt leider nicht und bin grade an meiner Linux-Box. 😉 (wahrscheinlich GetUpdateRegion() oder sowas, und dann muss man mit GetRegionRects() die Rechtecke auslesen)

    Regions-Kapitel in GDI und Windowing Beschreibung des Platform SDK durchlesen -- lohnt sich! 🙂



  • Power Off schrieb:

    Wenn man's genauer haben will, kann man auch die Update-Region des Fensters abfragen und in einem Array von Rechtecken auslesen. Den Namen der Funktion weiss ich jetzt leider nicht und bin grade an meiner Linux-Box. 😉 (wahrscheinlich GetUpdateRegion() oder sowas, und dann muss man mit GetRegionRects() die Rechtecke auslesen)

    Regions-Kapitel in GDI und Windowing Beschreibung des Platform SDK durchlesen -- lohnt sich! 🙂

    ...und das erst mal als Anfänger bei seite stellen, und logisch sich über das von Daniel informieren.


Anmelden zum Antworten