1. (habe ich letztens noch irgendwo geschrieben) Du musst Objekte, die du mit SelectObject in einen
DC selektierst, auch wieder deselektieren. Die richtige Vorgehensweise ist:
Delphi-Quellcode:
OldObject := SelectObject(
DC, NewObject);
// Zeichen etc.
SelectObject(
DC, OldObject);
Und das gilt für jeden
Handle-Typen separat, also für HBRUSH, HPEN, HBITMAP und HFONT.
2. Die Aussage
Delphi-Quellcode:
//Wenn BeginPaint ausgefuehrt wurde, EndPaint ausfuehren
if lpPaint.hdc <> 0 then
im Kommentar stimmt nicht ganz, denn
lpPaint ist gänzlich uninitialisiert wenn Message.DC<>0 war. Du hast also eine Chance von 1:2^32 dass in diesem Fall in lpPaint.hdc ein Zufallswert <> 0 drinsteht.