| |
VB & Windows APIBitmap Handle (GetClipboardData) löschen, ja oder nein? | | | Autor: UnixRulez | Datum: 14.04.05 11:54 |
| Ich habe folgendes Problem mit der Funktion: GetClipBoardData(wFormat as long) as long 1. Wenn die Funktion mit dem Parameter CF_BITMAP aufgerufen wird, liefert diese ein
GDI Handle auf eine Bitmap. Dieses wird dann mittels SelectObject in einen HDC eingefügt und alles ist gut.
2. Bevor dann 1. wiederholt wird, will ich vorher das Bitmap handle wieder freigeben
DeleteObject(hBMP) liefert 0 ==> Das GDI Object konnte nicht gelöscht werden
Nun die Preisfrage:
Ist das Bitmap handle welches von getClipboardData zurückgegeben wird irgendwie
ein spezielles Handle, das nicht gelöscht werden kann bzw. darf?
Die Online Windows API Referenz von "Ziemlich Klein Weich" oder die ZKW-DN gibt
leider keine genaue Information was es mit dem Bitmap handle auf sich hat.
vielen Dank im voraus
------------------------------
Geht nicht, gibts nicht!
------------------------------
| |
Re: Bitmap Handle (GetClipboardData) löschen, ja oder nein? | | | Autor: Zardoz | Datum: 14.04.05 13:10 |
| Hallo UnixRulez,
du kannst einen Handle nicht löschen, wenn er einem DC
zugeordnet ist.
Gruss,
Zardoz | |
Re: Bitmap Handle (GetClipboardData) löschen, ja oder nein? | | | Autor: UnixRulez | Datum: 14.04.05 16:12 |
| Das ist vollkommen richtig Zardoz...
aber nicht mein Problem. Der DC wird vorher gelöscht:
'Wenn ein gültiger DC da, dann löschen
If hdc <> 0 Then
gdiRet = DeleteDC(hdc)
Debug.Assert gdiRet <> 0
End If
'Falls ein gültiges Bitmap handle vorhanden, freigeben
'Dieses ist das Handle welches von der Funktion GetClipboardData zurück
'gegeben wurde
If hBmp <> 0 Then
gdiRet = DeleteObject(hBmp)
Debug.Assert gdiRet <> 0 'Hier krachts, da DeleteObject Null
' liefert
End If trotzdem vielen Dank für die Antwort
UnixRulez
------------------------------
Geht nicht, gibts nicht!
------------------------------
| |
Re: Bitmap Handle (GetClipboardData) löschen, ja oder nein? | | | Autor: Zardoz | Datum: 14.04.05 17:01 |
| Hallo UnixRulez,
mit DeleteDC werden alle, dem DC zugeordneten Objekte, gelöscht,
vorrausgesetzt, sie sind nicht noch einem anderen DC zugeordnet.
Da der DC schon beim Anlegen einen Handle hat, bleibt er, so wie
du das jetzt machst, im Speicher zurück.
Gruss,
Zardoz | |
Re: Addendum zu Fragestellung hat sich geändert | | | Autor: UnixRulez | Datum: 15.04.05 09:55 |
| Ergänzend wollte ich noch feststellen, dass man grundsätzlich vor dem Löschen
eines Device Contexts immer die GDI Objekte die bei dem
vorHerigesGDIObj = SelectObject(meinHDC, irgendEinNeues_GDIObj)
zurückgeliefert werden wieder in den HDC selektiert. Dies gilt vor allem wenn
man den HDC nicht selber mittels eines Create... Aufrufs erzeugt. Ein mit getDC
erlangter Device Context kann Objekte beinhalten und die kann man nach einem SelectObject nicht einfach löschen, da ein anderer Teil der Anwendung darauf vertraut,
dass diese noch gültige Handles darstellen.
------------------------------
Geht nicht, gibts nicht!
------------------------------
| |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|