Ich habe ein Fenster, mit 3 Dutzend Child´s, von denen gut die Hälfte nur beim Programmstart einmal gezeichnet werden müssen, danach ändern sie sich nicht mehr, weder Position noch Inhalt.
Also hatte ich die dumme Idee, ich baue mir bei Programmstart eine statische OffScreenDC, berechne den Inhalt der unveränderlichen Fenster, BitBlt alles in die OffScreenDC und kann mir die Hälfte der Fenster von Haus aus sparen, weil die damit Bestandteil vom Hintergrund des MainWindow werden.
Im WM_PAINT BitBlt ich dann von der OffScreenDC nach hdc und alles erscheint perfekt.
Dummerweise ist das in der Praxis nicht ganz so perfekt wie es klingt, zumindest nicht unter XP.
Während unter Vista alles ohne Probleme läuft, vergisst er unter XP nach einer Weile den Inhalt der OffScreenDC, sprich es gibt keinen Error, BitBlt wird nach wie vor ausgeführt, nur ist die OffScreenDC leer und alles was da vorher drin war wird transparent, im Schnitt nach ca 10 Minuten.
Wie kann es sein, dass der Fehler NUR unter XP auftritt, auch reproduzierbar, man muss nur ne Weile warten, aber unter Vista sauber läuft, am Code kanns kaum liegen, sonst würde es auch unter Vista nicht gehen.
Also hatte ich die dumme Idee, ich baue mir bei Programmstart eine statische OffScreenDC, berechne den Inhalt der unveränderlichen Fenster, BitBlt alles in die OffScreenDC und kann mir die Hälfte der Fenster von Haus aus sparen, weil die damit Bestandteil vom Hintergrund des MainWindow werden.
Im WM_PAINT BitBlt ich dann von der OffScreenDC nach hdc und alles erscheint perfekt.
Code:
if(!OffScreenDC)
{
OffScreenDC = CreateCompatibleDC(hdc);
OffScreenBitmap = CreateCompatibleBitmap(hdc, 640, 480);
BITMAP bm;
// usw.
}
BitBlt(hdc, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom,
OffScreenDC, ps.rcPaint.left, ps.rcPaint.top, SRCCOPY);
Dummerweise ist das in der Praxis nicht ganz so perfekt wie es klingt, zumindest nicht unter XP.
Während unter Vista alles ohne Probleme läuft, vergisst er unter XP nach einer Weile den Inhalt der OffScreenDC, sprich es gibt keinen Error, BitBlt wird nach wie vor ausgeführt, nur ist die OffScreenDC leer und alles was da vorher drin war wird transparent, im Schnitt nach ca 10 Minuten.
Wie kann es sein, dass der Fehler NUR unter XP auftritt, auch reproduzierbar, man muss nur ne Weile warten, aber unter Vista sauber läuft, am Code kanns kaum liegen, sonst würde es auch unter Vista nicht gehen.