Unter XP SP2 und Windows 2003 Server kann es bei eingeschalteten Themes zu GDI-Leaks kommen. Speziell wird hier auf MFC Anwendungen hingewiesen (siehe dazu meine Anmerkung unten).
Die Beschreibung und der Download-Link für den Hotfix finden sich hier:
MFC applications leak GDI objects on computers that are running Windows Server 2003 or Windows XP
Anmerkung:
Dies ist ein Hotfix für Theme Handler unter Windows 2003 und Windows XP SP2. Er greift nicht in die MFC ein ❗
Man muss also eigentlich davon ausgehen, dass der Bug im Windows Themes Kern steckt und nichts mit der MFC zu tun hat, sondern eher damit zu tun hat wie in der MFC mit Windows Ressourcen umgegangen wird.
Den Effekt bekommt man ziemlich einfach hin, indem man mit dem Wizard eine MFC-MDI Applikation anlegt. Dann einfach Strg+N festhalten und alle Fenster wieder schließen mit Strg+F4, danach findet man einige Hundert GDI Objekte ausgewiesen im Task-Manager, die vorher nicht da waren.
Ich habe einen Test mit dem MDI-Sample aus dem Petzold gemacht und dieses zeigt diesen Effekt nicht. Evtl. liegt es auch einfach nur an dem Umgang mit den Toolbars. Genaueres konnte ich nicht herausbekommen.
- Erstaunlich 1.: Dieser Patch ist mit 2 Jahren doch relativ alt (März 2006) und er ist mir erst durch eine Diskussion in einer Produkt-Gruppe über den Weg gelaufen …
- Erstaunlich 2.: Dieser Patch wird nicht durch den Windows Update Service installiert, obwohl er in meinen Augen da rein gehört ❗
Ob nun der Update Service nun den primären Fokus auf Sicherheit hat oder nicht. Ich empfinde dieses Verhalten des Theme Handlers als kritisch!
Ist mir bisher noch nicht untergekommen, da ich aber auch eine gepatchte uxtheme.dll laufen habe, um alternative themes anzeigen zu können. Vielleicht habe ich mir mit dem tausch der dll, aber auch schon die verbesserte Variante auf meinem Rechner installiert 😉
Kann das Problem unter XP 64 auch nicht nachvollziehen (oder ich mache irgendwas falsch).
Bleibt zu hoffen das der Patch im XP SP3 enthalten ist.
Die Beschreibung in dem Hotfix ist auch nicht sonderlich genau. Könnte sein, dass es nur die x86 (32bit) Variante betrifft, man müsste sich das Paket genauer ansehen.
BTW: Meine Projekte verwenden kein MDI und die BCG-Library. In denen kann ich keine GDI-Leaks ausmachen!