CStatic im Hintergrund
-
Hallo zusammen,
hab im CStatic ein Bild und möchte gern über diesen CStatic ein anderes CStatic legen und dort ein Bild anzeigen bzw animieren. Leider bleibt das 2 te Static immer im Hintergrund . Hat jemand eine Idee ?Danke schön
-
SetWindowPos?
-
also ich bekomm Bild 2 über Bild 1 nur ist Bild 2 immer im Hintergrund. Bild 2 muss immer über Bild 1 liegen , so wie bei Ebenen im Photoshop z.B .
-
Ja, und das solltest du eigentlich mit SetWindowPos erreichen. Schau dir mal den ersten Parameter (MFC-Version) an. wndTop für Bild2 und wndBottom für Bild1. Ich denke, das sollte so klappen...
EDIT: Das Stichwort ist Z-Order!
-
hier is mein Code
int a,i;
main.DeleteObject();
main.LoadBitmap(IDB_main);
m_main.SetWindowPos(&CWnd::wndBottom ,0,0,800,598,NULL);
m_main.SetBitmap(main);bildh.DeleteObject();
bildh.LoadBitmap(IDB_horizont);
m_horz.SetWindowPos(&CWnd::wndTop ,15,115,605,52,NULL);
m_horz.SetBitmap(bildh);for (i=0;i<100;i++){
m_horz.MoveWindow(15,a,605,52);
Sleep(5);
a++;
}trotzdem bleibt bei mir m_horz hinter dem m_main
die Schleife is da damit das Bild ( bildh ) nach unten fährt.
-
Der Ansatz is schon nicht der günstigste den du gewählt hast, da wenn du das dann mal mit der Z-Ordnung hinbekommen hast (glaube mich zu erinnern das es an der reihenfolge der IDC in der resource.h liegt), wird die nächste frage kommen wie man das geflacker weg bekommt. Denn durch das unterschiedliche zeichnen wird das vermutlich wie wild flackern. Erstell dur doch einfach eine Bitmap, Zeine dein Hintergrundbild rein, dann das Vordergrundbild und dann die gesammte in dein CStatic und fertig. Somit erübrigt sich jede weiter diskusion um z-order.
-
Ich gebe zu, das macht mehr Sinn! Gerade, wenn sich ein Bild bewegen soll...
-
hört sich nicht schlecht an , also beide Bilder in ein CBitmap und dieses dann in ein CStatic. Und ja es flackert ! Oder meinst du das ich Alle Bilder der Animation einzeln abspeichern soll und nacheinander abspielen ? Nur dann wäre das Projekt viel zu riesig , bestimmt 1 GByte.
-
DWSk schrieb:
Oder meinst du das ich Alle Bilder der Animation einzeln abspeichern soll und nacheinander abspielen ? Nur dann wäre das Projekt viel zu riesig , bestimmt 1 GByte.
Nein, das machst du alles in der einen Bitmap. Bilder in der Bitmap zusammenfriemeln, darstellen, Position von Bild1 anpassen, wieder zusammenfriemeln, wieder darstellen...
-
is ganz einfach
1. neue Klasse von CStatic ableiten
2. diese deinem static auf dem Dialog zuordnen
3. in der neuen Klasse beide bilder in die jeweilige CBitmap laden die member der klasse sind
4. CBitmap in Zielgröße erstellen
5. Hintergrund in die Zielbitmap laden
6. Vordergrund in die Zielbitmap laden an entsprechender pasition die variabel is
7. Compatiblen DC für die Zielbitmap erstellen
8. Zielbitmap in den DC (in 7. erstellt) laden
9. in der OnPaint deiner Klasse das ZielDC auf den DialogDC Blitten (BitBlt)
10. Timer erstellen der die Position zu einer festgelegten zeit neu setzt und ein neuzeichnen erwirkt (invalidate())punkte 7-9 machste in der OnPaint() deiner neuen klasse und punkt 10 im timer und fertig is deine animation
viel glück
PS: hoffe hab nix vergessen