![]() |
Doublebuffered im WM_NCPAINT
Ich zeichne im WM_NCPAINT meinen eigenen Border samt Caption Bereich.
Ist es eigentlich sinnvoll, dafür auch Dobulebufferd (natürlich selbstgeschreiben, da ja das Standard Doublebuffered hier nicht greifen würde) zu verwenden ? Der Rahmen hat eine Briete von 4 Pixeln und oben von 24 Pixeln, es sind chon etwas aufwendige Effekte dabei, das es sich auszahlen könnte, aber wie sollte das Bitmap dann aussehen, wie der Bereich, wo später dann mit WM_PAINT gzeiechnet wird, damit das nicht zu flackern anfängt ? Gibt es eigentlich eine Message, die ein neues WM_NCPAINT aufruft, für ein WM_PAINT brauche ich ja nur ein Invalidate. Und ein Invalidate ignoriert ja das WM_NCPAINT. |
Re: Doublebuffered im WM_NCPAINT
Die Art, wie der Bereich des NCPaint aussieht, ist in der Region des übergebenen DCs festgelegt. Frag einfach die Dimensionen dieses Canvas ab und richte dein DoubleBuffer-Bitmap entsprechend ein.
Das NCPaint kannnst Du über SendMessage realisieren. Du bist dann aber auch für die Parameter der Message verantwortlich. Nativ gibt es aber dafür keine Prozedure. |
Re: Doublebuffered im WM_NCPAINT
Zitat:
Bzw. wird es da nicht flackern ? Ich überlege, ob ich nicht für jeden Rand (also 4 mal ) ein eigenes Bitmap verwende .... |
Re: Doublebuffered im WM_NCPAINT
Nur nebenbei: du beachtest aber, daß die Dimensionen komplett systemabhängig sind?! Du mußt dazu die Dimensionen jeweils vom System ermitteln. Also mit 4px hier und Xpx da hast du vielleicht auf deinem System ein Ergebnis, aber wenn wir schonmal sowas wie XP vs. 2000 vs. 95 betrachten, dann merkt man, daß es da Unterschiede gibt.
Selbst auf einem System kann ein Benutzer theoretisch sehbehindert sein und sich deshalb für ein anderes Format und andere Färbung entschieden haben. Wenn deine Anwendung also irgendwann den Entwicklerrechner verläßt (also nicht nur ein Prototyp bleibt), solltest du all das beachtet haben. Nachtrag: Wenn der Rand nix sonderlich extravagantes ist, sondern ein gleichmäßiges Muster, kannst du mit verschobenen Blits das ganze in einer Schleife über die Länge hinkopieren. Es wird ja nicht immer bei dieser Größe der Anwendung bleiben. Theoretisch kann der Bildschirm auch mal aus heutiger Sicht überdimensional groß sein, oder eben kleiner. Programmieren ist eben die Kunst etwas zu verallgemeinern um es danach wieder auf Spezialfälle herunterzubrechen. |
Re: Doublebuffered im WM_NCPAINT
2MB haben einem heutigen System doch nicht mehr an :mrgreen:
Ne, mal im Ernst: GetSystemMetrics nutzen und auslesen und für Teilbereiche den DoubleBuffer erzeugen\Resizen nach abschluss eines Bereichs. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz