Grafik einer Dialogbasierten Anwendung aktualisieren

Ok, vielen dank, ich bin schon einen ganzen Schritt der Lösung näher.

Hab das so gemacht:

void CDevice::OnPaint()
{
CWnd *t= GetDlgItem(IDC_Image);
CDC *pDC = new CClientDC( t );

CRect imagesize;
t->GetWindowRect(imagesize);
t->ScreenToClient(imagesize);

Picture.Show(pDC, imagesize ); // show the picture

CRect clrect;
ImageControl.GetWindowRect(&clrect);
ScreenToClient(&clrect);
ValidateRect(clrect);
CPaintDC DC(this);
delete pDC;
}


Aber es war doch zu erwarten das was nicht klappt :(

Also, erstmal (ich denke das ist das kleinere Problem) zeigt er mir am Anfang das Bild nicht, erst nach einem durchlaufen der OnPaint Funktion.

Das schlimmere aber ist, das er mir einen Assert ausgibt nach dem drücken des OK buttons, und zwar ist mein HWnd = NULL, also kommt u.a. ein assert in der wincore.cpp mit
ASSERT(hWnd != NULL);

Tja, da stehe ich nun....
 
Ahh, den fehler findet man immer dann raus, nachdem man schon gepostet hat!

Also der assert kam deswegen, weil ich den modify style gemacht habe... ohne ihn funktioniert aber alles auch ziemlich gut, wozu brauche ich es überhaupt?
 
Klappt alles!

Ach, laß uns regenbogen malen und bunte pillen schlucken!

Vielen dank Endurion!

Das war ne schwere Geburt!

Also wenn ich das ImageControl.Invalidate() weglasse, wird auch am anfang das Bild angezeigt.

So sieht der fertige Code aus:

void CDevice::OnPaint()
{


CWnd *t= GetDlgItem(IDC_Image); //Pointer auf das Static Feld IDC_Image holen
CDC *pDC = new CClientDC( t ); //CDC dem Pointer zuweisen

CRect imagesize;
t->GetWindowRect(imagesize);
t->ScreenToClient(imagesize);


CPaintDC DC(this);
Picture.Show(pDC, imagesize ); // show the picture

CRect clrect;
ImageControl.GetWindowRect(&clrect); //Koordinaten holen...
ScreenToClient(&clrect);//..und Umrechnen
ValidateRect(clrect);

delete pDC;

}
 
Was machst du denn da innerhalb der OnButtonxxx-Routine? Da musst du ja irgendwas aufrufen, das kein HWND hat.
 
Nun, da der Assert nach dem OK Button kam, meinst du wahrscheinlich diesen...

tja, da war nix, oder halt nur das Windows standart OnOk();

Aber wie gesagt, es muss an dem modify style aufruf gelegen haben
 
Ach so, dann wars vermutlich das Owner-Draw. Wenn ein OnDrawItem angelegt wird, wird auch ein Aufruf an die Basisklasse eingesetzt. Dieser hat ein Assert eingebaut. Das soll den Programmierer zwingen, die Darstellroutine einzusetzen. Beim Ende der Darstellroutine darf die Basisklassen-Funktion NICHT aufgerufen werden (einfach return TRUE oder wasauchimmer).
 

Neue Beiträge

Zurück