versch. Grafiken anzeigen auf Buttonklick
-
Hi,
bin MFC-Anfänger (naja, besser spät, als nie, sagen manche
).
Was muss ich tun, damit au Buttonklick hin jeweils eine andere Grafik im Fenster dargestellt wird?
Also Button1 -> Grafik1, Button2 -> Grafik2
Hab hierzu also mal zwei Buttons definiert und deren Event-Methoden folgendermaßen codiert:
void CTest7Dlg::OnBnClickedher() { MessageBox("her","CFrame constructor",MB_OK); CTest7Dlg::Tierchen_her = true; UpdateWindow(); } void CTest7Dlg::OnBnClickedweg() { MessageBox("weg","CFrame constructor",MB_OK); CTest7Dlg::Tierchen_her = false; //true; UpdateWindow(); }
Die Zuweisung funktioniert. Klick ich Button1, erscheint auch die MessageBox mit Text "her", klick ich Button2, erscheint die mit Text "weg".
So schaut nun der Code der Methode OnPaint() aus:
void CTest7Dlg::OnPaint() { if ( CTest7Dlg::Tierchen_her == true ) { CStatic *stat = new CStatic(); stat->Create( NULL, WS_CHILD|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE, CRect(0, 0, 600, 600), this ); CBitmap *b = new CBitmap; b->LoadBitmap( IDB_BITMAP1 ); stat->BringWindowToTop(); stat->SetBitmap((HBITMAP)*b); } else { CStatic *stat = new CStatic(); stat->Create( NULL, WS_CHILD|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE, CRect(0, 0, 600, 600), this ); CBitmap *b = new CBitmap; b->LoadBitmap( IDB_BITMAP2 ); stat->BringWindowToTop(); stat->SetBitmap((HBITMAP)*b); }
Aus irgendeinem Grund wird jedoch immer nur die eine Grafik (IDB_BITMAP2) angezeigt. Woran liegt das?
Statt UpdateWindow() hab ich auch schon OnPaint() direkt aufgerufen, kein Unterschied.
Gruß Maik
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-139372.html
Da wurde heute schon nach einem Teil Deines Problems gefragt.Das mit dem new auf das CStatic ist ohne ein delete garnicht gut.
Besser Du machst eine Membervariable von CTest7Dlg draus.Ohne Destroy baust Du natürlich immer nur neue Fenster. Eigentlich wollen wir doch das Bild immer nur tauschen oder? Also eine Membervariable vom Typ CStatic und die wird genau ein mal erstellt (aber nicht im Paint und auch nicht beim Klicken). Und die Bitmap setzen wir dann auch nicht beim Paint um, sondern beim Klicken. Danach wird nur neu gemalt.
Ich hoffe ich, habe nicht zuviel verraten und Du kannst selber noch ein bisschen tüfteln.
-
Hi av_privat,
klingt vernünftig (hab nur nicht gleich dran gedacht, dass da eine Fensterliste aufgebaut wird und dass der Zeiger eben nicht einfach nur überschrieben wird) und funktioniert.
Danke!
Maik