Keine OnDraw-Nachricht beim Neuzeichnen eines Fensters

ral

Grünschnabel
Hallo zusammen!

Ich habe eine SDI-Anwendung erstellt, deren Basisfenster-Klasse von der "CFormView"-Klasse abgeleitet wurde. Das Fenster verfügt über eine vert. Scroll-Leiste.
Nun möchte ich in diesem Fenster etwas zeichnen:

Vereinfacht sieht das so aus:

CMyView::OnPaint
{
CClienetDC dc(this);
dc.rectangle(1,1,100,100);
}

Diese Prozedur zeichnet zwar lediglich ein kleines Quadrat in den Anwendungsbereich meiner FormView, reicht aber für meine Problembeschreibung aus.

Verdecke ich mein Fenster durch ein anderes und mache es anschließend wieder sichtbar, so wird mein Fenster incl. meiner Grafik neu gezeichnet (dank OnPaint() ) - alles prima!

Scrolle ich aber meinen Anwendungsbereich soweit nach oben, dass meine oben Grafik aus dem sichtbaren Bereich meines Fensters verschwindet und scrolle ihn anschlie0end wieder nach unten, so taucht meine Grafik nur zerstückelt wieder auf. Sie wurde also nicht komplett neu gezeichnet.

Ich habe es überprüft, Windows liefert in diesem Fall weder eine WM_OnPaint, noch eine WM_OnDraw-Nachricht... Dabei wären dasd doch die richtigen Einstiegspunkte, um meine Grafk erneut zu zeichnen, oder?

Freundliche Grüße
ral
 
Windows wird dafür eine andere Nachricht senden. Ich kann dir aber nicht sagen welche.
Schau mal, ob du eine WM_VSCROLL oder WM_HSCROLL bekommst.
 
Flegmon hat gesagt.:
Windows wird dafür eine andere Nachricht senden. Ich kann dir aber nicht sagen welche.
Schau mal, ob du eine WM_VSCROLL oder WM_HSCROLL bekommst.


Ohja, stimmt natürlich, Windows sendet eine WM_VScroll-Nachricht für das vertikale Scrollen. Muss ich mich denn tatsächlich nach jedem Scroll-Ereignis selbst um das Neuzeichnen der Grafik kümmern? Nicht, dass es MIR zu mühsam wäre, aber es kostet ja auch viel Rechenleistung. Gibt es da keine andere Möglichkeit?

Danke schön,
ral.
 
Zurück