ToolBar Control - DC zwischenspeichern
-
Hallo!
Ich bin dabei mir eine komplett eigene ToolBar zu schreiben. Meine Klasse ToolBar ist lediglich von der MFC Klasse CWnd abgeleitet.
Nun gibt es allerdings beim Zeichnen ein kleines Problem. Wenn die ToolBar einen Farbverlauf als Hintergrund hat, und man mit der Maus über einen ToolBar-Button fährt und dann die Maus wieder entfernt, ist der Hintergrund "weg" da ja durch das MouseMove Event der Button anders gezeichnet wurde. Nun habe ich mir überlegt quasi den DC des Buttons VOR dem MouseMove Event zu speichern, um es beim MouseLeave Event wieder zurück kopieren zu können.
Ich habe allerdings keine Ahnung wie ich das anstellen soll. Jeder Button hat seine eigene Button Struktur. Dort gibt es eine Membervariable CMemDC. Hier speichere ich mit
pButton->SaveDC(GetDC(), &pButton->m_Rect);den DC. Wie kann ich den DC nun wieder "zurückkopieren"?
-
Du darfst nur in WM_PAINT zeichnen. Alles andere ist für die Füsse.
Ein DC ist nicht der Inhalt der Fenster sonder die Summe aller Eigenschaften mit denen gezeichnet wird.
-
Martin Richter schrieb:
Du darfst nur in WM_PAINT zeichnen. Alles andere ist für die Füsse.
Ein DC ist nicht der Inhalt der Fenster sonder die Summe aller Eigenschaften mit denen gezeichnet wird.
Hmm, verstehe ich nicht ganz. Wird ein Speichern/Kopieren des DCs nicht funktionieren?
-
Weil es nicht den Inhalt des Kontextes auf dem Monitor sichert. Ich vermute das möchtest Du! Es speicher nur die aktuellen Einstellungen und returniert diese.
-
Martin Richter schrieb:
Weil es nicht den Inhalt des Kontextes auf dem Monitor sichert. Ich vermute das möchtest Du! Es speicher nur die aktuellen Einstellungen und returniert diese.
Genau. Also ist das ohne weiteres nicht möglich? Also es müsste quasi ein Screenshot von dem Button Rect gemacht, um diesen später wieder zu zeichnen.
-
Das macht niemand. Warum auch. Platziere Deinen Code zum Malen in OnPaint male dort und kümmer Dich nicht weiter drum.
Wen müsstest Du die die Bitmap dort besorgen und diese kopieren.
-
Möglich wäre es aber, oder?
Vom Mehraufwand würde es sich aber warscheinlich nicht lohnen.
-
Wenn
1. ich bereits Code habe, der meinen Toolbar korrekt anzeigt.
2. ich keine Geschwindigkeitsprobleme durch neuanzeigen eines minimal kleinen Bildscirm Auschnittes habe.
3. es absolut transparent und einfach ist den Abschnitt neu anzeigen zu lassen (Invalidate,UpdateWindow)Frage:
Warum sollte ich einen Bildschimausschnitt sichern, der in den nächsten 2ms schon wiederveraltet sein kann? Was rechtfertigt den Mehraufwand?
-
Ich hatte erst überlegt, ob es vielleicht schneller ist wenn ich immer nur das jewilige Button Element neu zeichne und nicht die gesamte ToolBar mit Hintergrund etc. Deswegen hätte ich den einen Ausschnitt sichern müssen wenn zum Beispiel der ToolBar Hintergrund aus einem Farbverlauf besteht.