Die "Systemressourcen" sind etwas anderes als einfacher Speicher. Systemressourcen beschreiben alle Daten des grafischen Systems, auf die Windows zugreifen kann. Ressourcen sind Daten, die systemweit zur Verfügung stehen, und diesen Ressourcenpool teilen sich *alle* Programme im System, auch die Windows Systemoberfläche.
Unter die Ressourcen fallen solche Dinge wie Menüs, Pinsel, Farbpaletten, Schriftarten, Füllmuster, Bitmaps...
Nicht darunter fallen, auch wenn sie über das gleiche System mitverwaltet werden, alle Dienste, die vom Betriebssystem angeboten werden, wie Prozesshandles, Threads, Files, und Synchronisationsobjekte.
Leider sind die Ressourcen nicht unerschöpflich, sondern es kann der Verwaltungsspeicher für diese Objekte ausgehen. In diesem Fall können keine neuen Ressourcen mehr angefordert werden, und es kommt zu Fehlfunktionen. Dies äußert sich darin, das Mauscursor verschwinden, Bitmaps nicht mehr oder nicht mehr korrekt angezeigt werden, oder alle Texte auf einmal in der Systemschriftart angezeigt werden. In all diesen Fällen ist der Poolspeicher für die Systemressourcen erschöpft. Leider kann man diesen Speicher nicht einfach hochschrauben, das läßt die systeminterne Verwaltung der Ressourcen nicht zu (über Handles).
Der Grund für diese Probleme liegt an unsauber programmierten Programmen, Windows ist daran nicht Schuld! Bei Windows ist es ganz wichtig, daß alle vom
GDI angeforderten Objekte, seien es Pens, Brushes, Icons oder Bitmaps, nach Gebrauch aus dem
DC entfernt und per DeleteObject() gelöscht werden müssen. Geschieht dies nicht, hinterlässt das Programm z.B. bei jedem Aufruf des WM_PAINT-Callbacks Ressourcenmüll im System. Und irgendwann haben die ganzen nicht gelöschten Ressourcen die kompletten Systemressourcen aufgemampft, und es geht gar nichts mehr. Also solltest du dir dein Programm noch mal ganz genau anschauen, wo irgendwelche
GDI-Objekte nicht freigegeben werden.