Welches Handle für 'GetDC' beim Desktop-Window

30/07/2009 - 15:31 von Ralf Schlegel | Report spam
Hallo NG,

das ist kein Problem, sondern eine grundsàtzliche Frage:
In diversen Funktionen benötige ich ein hDC vom Desktop.
Wenn ich mich so im Netz umschaue und andere Beispiele studiere, stelle
ich fest, dass die gesamte Bruderschaft dabei immer folgendermaßen vor geht:

Dim hDC as long
hDC = GetDC(0&)


ICH mache das aber folgendermaßen:

Dim glbDeskHwnd as long
Dim hDC as long

glbDeskHwnd = GetDesktopWindow()
hdc = GetDC(glbDeskHwnd)


Beides funktioniert!
Mein 'glbDeskHwnd' hat aber den Dezimalwert '65552' und nicht '0'!!!

Mich würde nur interessieren: ist meine Variante ordentlicher, oder
überflüssig?
Wer kennt sich im Detail aus?

Danke und liebe Grüße aus Wegberg

Ralf Schlegel
www.vb-zentrum.de
 

Lesen sie die antworten

#1 Thorsten Albers
30/07/2009 - 16:39 | Warnen spam
Ralf Schlegel schrieb im Beitrag
...
Wenn ich mich so im Netz umschaue und andere Beispiele studiere, stelle
ich fest, dass die gesamte Bruderschaft dabei immer folgendermaßen vor


geht:

Dim hDC as long
hDC = GetDC(0&)


ICH mache das aber folgendermaßen:

Dim glbDeskHwnd as long
Dim hDC as long

glbDeskHwnd = GetDesktopWindow()
hdc = GetDC(glbDeskHwnd)


Beides funktioniert!
Mein 'glbDeskHwnd' hat aber den Dezimalwert '65552' und nicht '0'!!!

Mich würde nur interessieren: ist meine Variante ordentlicher, oder
überflüssig?
Wer kennt sich im Detail aus?



Im Prinzip spielt es keine Rolle, welchen Weg Du hier gehst, da für GetDC()
dokumentiert ist, daß bei Übergabe eines NULL-Handles(!) (= '0&') ein
DC-Handle für den 'gesamten Bildschirm', d.h. für das Desktop-Fenster
zurückgeliefert wird (wobei allerdings anzumerken ist, daß das nur für
'neuere' MSDN-Versionen gilt; in àlteren fehlte dieser Hinweis, man
verwendete dann also eine undokumentierte Version, was nicht von Vorteil
ist).

Deine Variante hat jedoch 2 Vorteile:

1. Mit 'If glbDeskHwn = 0' làßt sich prüfen, ob bereits GetDesktopWindow()
fehlgeschlagen ist. Auch wenn es sehr, sehr unwahrscheinlich ist, daß
dieser Fehler jemals auftritt, ist es dennoch besser, ihn auf diese Weise
abzufangen.

2. Dein Code ist leichter erweiter-/anpassbar, wenn 'mal nicht mit dem
Fenster des aktuellen sondern eines anderen Desktops (oder überhaupt einem
anderen Fenster) gearbeitet werden soll, da lediglich die Zeile
glbDeskHwnd = GetDesktopWindow()
angepaßt werden müßte. Bei
hDC = GetDC(0&)
hingegen müßte der Code ergànzt und angepaßt werden. Sicherlich nicht die
Welt, aber...

Ansonsten:
hDC = GetDC(0&)
müßte etwas schneller sein als Dein Code, weil ein Sprung in eine 'externe
Bibliothek' entfàllt. Aber der Unterschied dürfte marginal sein.

Thorsten Albers

albers (a) uni-freiburg.de

Ähnliche fragen