Neuzeichnen...

fh_study

Erfahrenes Mitglied
Hallo,

mal wieder ne Frage

Habe 2 kleine Probleme in einem MFC Programm, die wahrscheinlich die gleiche Lösung haben:

1. Nachdem ich das Fenster (des erstellten Programmes) verkleinere (minimize) und dann wieder vergrößere, wird nicht automatisch neu gezeichnet, obwohl ich die Funktion OnPaint eingebunden habe (auch mit WM_PAINT oder so ähnlich)

2. Das ganze ist ein "Mensch Ärgere Dich Nicht Spiel". Dort kann man seinen Spielstand speichern. Nach dem Laden des Spielstandes soll natürlich auch neu gezeichnet werden. Geht aber auch nicht.

Wenn ich im Fenster Hoch bzw. Runterscrolle wird OnPaint aufgerufen und alles wunderbar.

Hoffe ihr könnt mir mal wieder helfen
 
moin


Vielleicht mit UpdateWindow()?!

Ich frag mich warum du deine ganzen MFC Fragen nciht im MFC Forum stellst?


mfg
umbrasaxum
 
@umbrasaxum

...weil dort leider viel zu wenig Leute drin sind. Und hier gibt es ja uch immer gute Antworten.

Bei UpdateWindow() steh ich grad ein bißchen auf dem Schlauch. Mit welchem MessageHandler wird das ausgelöst?

Update Window einfach in OnPaint reinschreiben bringt nichts, da OnPaint anscheinend nicht aufgerufen wird.
 
Zuletzt bearbeitet:
moin


Kann dir nicht viel dazu sagen da ich die API und nciht die MFC nutze.

Aber ich kann dir zeigen was die MSDN dazu sagt:
Code:
Updates the client area by sending a WM_PAINT message if the update region is not empty.

void UpdateWindow( );
Remarks
The UpdateWindow member function sends a WM_PAINT message directly, bypassing the application queue. If the update region is empty, WM_PAINT is not sent.

Example
// In this example a rectangle is drawn in a view. 
// The OnChangeRect() function changes the dimensions 
// of the rectangle and then calls CWnd::Invalidate() so the 
// client area of the view will be redrawn next time the
// window is updated.  It then calls CWnd::UpdateWindow 
// to force the new rectangle to be painted.

void CTestView::OnChangeRect() 
{
   // Change Rectangle size.
   m_rcBox = CRect(20, 20, 210, 210);

   // Invalidate window so entire client area 
   // is redrawn when UpdateWindow is called.
   Invalidate();   

   // Update Window to cause View to redraw.
   UpdateWindow();
}

// On Draw function draws the rectangle.
void CTestView::OnDraw(CDC* pDC)
{
//  ..  Other draw code here.

   pDC->Draw3dRect(m_rcBox, 0x00FF0000, 0x0000FF00);
}


mfg
umbrasaxum
 
so hab ich mir das schon gedacht, aber wie gesagt, dazu müsste erstmal beim vergrößern bzw. laden irgendwine Funktion aufgerufen werden in der ich dann UpdateWindow() schreiben könnte.
 
moin


Kannst du nciht deinen Hautfenster ein Ereignis hinzufügen?
Per Assisstent mein ich.

Und dann OnChangeRect auswählen vielleicht auch OnChangeWindow.

Du benutzt doch das Visual Studio?!


mfg
umbrasaxum
 
Ja, hab da schon alles mögliche ausprobiert mit dem Klassenassistenten. Eigentlich ist meines Wissens OnPaint, welches durch den MassageHandler ON_WM_PAINT() aufgerufen wird für zuständig. Aber irgendwie...
Arbeite mit VisualC++ 6.0
 
moin


Nene ich glaub das das OnPaint oder WM_ON_PAINT erst durch UpdateWindow aufgerufen werden, bin mir da sicher.

Bei der API reagiere ich auf sowas per WM_SIZE.


mfg
umbrasaxum
 
Zuletzt bearbeitet:
Noch ein Nachtrag, hab mich geirrt OnPaint wird einwandfrei aufgerufen. Dann dürfte das Problem wohl da liegen, dass die Daten noch nicht schnell genug vorhanden sind.
 
Zurück