Frage

MSDN zeigt Folgendes für CreatePatternBrush an:

Sie können einen Musterpinsel löschen, ohne die zugehörige Bitmap mit der Funktion DeleteObject zu beeinflussen.Daher können Sie diese Bitmap verwenden, um eine beliebige Anzahl von Musterbürsten zu erstellen.

Meine Frage ist das Gegenteil.Kann ich die HBITMAP direkt nach dem Erstellen des Pinsels löschen, wenn der HBRUSH langlebig ist?IE:Speichert der HBRUSH eine eigene Kopie der HBITMAP?

In diesem Fall möchte ich, dass HBRUSH einen Objektbereich hat, während HBITMAP einen Methodenbereich hat (die Methode, die HBRUSH erstellt).

War es hilfreich?

Lösung

Die HBRUSH und HBITMAP sind völlig unabhängig. Die Griffe voneinander völlig unabhängig gelöscht werden können, und, einmal erstellt, keine Änderungen an jedes Objekt der andere bewirken.

Andere Tipps

Die Bürste hat seine eigene Kopie der Bitmap hat. Dies ist leicht zu sehen, durch die Bitmap zu löschen, nachdem die Bürste erstellen und dann mit dem Pinsel (funktioniert)

GetObject Mit einer LOGBRUSH Struktur zu füllen wird den ursprünglichen BITMAP Griff in Mitglied lbhatch zurückkehren, aber, und nicht die Griff der Kopie, leider. Und mit GetObject auf den zurück Bitmap-Handle schlägt fehl, wenn das Bitmap gelöscht wird.

Wer eine Idee, wie in diesem Fall die Original-Bitmap-Dimensionen von der Bürste zu bekommen? Ich möchte eine Kopie der Musterpinsel erstellen, obwohl die ursprüngliche Bitmap gelöscht. Ich kann eine Kopie des Original-Bitmap erhalte einfach durch mit dem Pinsel zu malen, aber ich weiß nicht, es ist Größe. Ich habe versucht, mit SetbrushorgEx (hdc, -1, -1), die -1 hofft reduziert würde Modulo seinen Dimensionen, wenn Pinsel in Gerätekontext ausgewählt und Werte, wenn ich mit GetBrushOrgEx abrufen. Funktioniert nicht.

Ich denke, die Bitmap die Bürsten überleben müssen: die Bürste nur die vorhandene Bitmap verweist, anstatt sie zu kopieren

.

Sie können immer versuchen und sehen, was passiert ist.

Ich bezweifle, dass die CreatePatternBrush () API kopiert die Bitmap Sie es geben, da ein HBITMAP ist:

  1. ein GDI-Griff, die maximale Anzahl davon begrenzt ist, und
  2. möglicherweise recht groß.

Win32 und GDI neigen dazu, über das Erstellen von internen Kopien Ihrer Daten, konservativ zu sein, wenn auch nur, weil, wenn die meisten ihrer APIs erstellt wurden (CreatePatternBrush () stammt aus dem Windows 95, und viele Funktionen sind noch älter), Speicher und GDI Griffe waren in vielen begrenzten Versorgung als sie jetzt sind. (Zum Beispiel Windows 95 erforderlich war mit nur 4 MB RAM auf einem System ausgeführt werden.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top