[VB6] Unterschiedliche DC's

18/06/2010 - 15:29 von Heinz-Mario Frühbeis | Report spam
Hallo!

Gegeben :

3 DLL

1. DLL
Eine Form
2. DLL
Eine P.Box
3.DLL
"Mittler", "Aufrufer" zwischen, bzw. von den DLL's

In der dritten DLL rufe ich dann auf :
Result = BitBlt(DLL2_PBOX.HDC, ..., DLL1_FORM.HDC , ...)
Result = 0
Wobei die Form und die PBox als Property übergeben werden.

Schalte ich jetzt GetDC dazwischen ->
fDC = GetDc(DLL1_Form.Hwnd)
pbDC = GetDc(DLL2_PBOX.Hwnd)
ist Result = BitBlt( pbDc, ..., fDc, ...) = 1

Wobei auch fDC <> DLL1_FORM.HDC ist und
pbDC <> DLL2_PBOX.HDC ist.

UND (in der 1. DLL bei GetDC) fDC = FORM.HDC ist

Kann mir hier jemand erklàren warum das so ist?

Gruß
Heinz-Mario Frühbeis
 

Lesen sie die antworten

#1 Armin Zingler
18/06/2010 - 16:01 | Warnen spam
Am 18.06.2010 15:29, schrieb Heinz-Mario Frühbeis:
Hallo!

Gegeben :

3 DLL

1. DLL
Eine Form
2. DLL
Eine P.Box
3.DLL
"Mittler", "Aufrufer" zwischen, bzw. von den DLL's

In der dritten DLL rufe ich dann auf :
Result = BitBlt(DLL2_PBOX.HDC, ..., DLL1_FORM.HDC , ...)

Result = 0
Wobei die Form und die PBox als Property übergeben werden.



Als Property von was werden sie wem übergeben?

Schalte ich jetzt GetDC dazwischen ->
fDC = GetDc(DLL1_Form.Hwnd)
pbDC = GetDc(DLL2_PBOX.Hwnd)
ist Result = BitBlt( pbDc, ..., fDc, ...) = 1

Wobei auch fDC <> DLL1_FORM.HDC ist und
pbDC <> DLL2_PBOX.HDC ist.

UND (in der 1. DLL bei GetDC) fDC = FORM.HDC ist



Die letzte Zeile verstehe ich nicht. Was ist "FORM"
und welche Rolle spielt das?

Kann mir hier jemand erklàren warum das so ist?



Der Unterschied wird sein, dass, falls pbox.autoredraw = true,
pbox.hdc das Handle zum Image ist wàhrend getdc(pbox.hwnd)
den hdc des Controls liefert. Warum das eine funktioniert
und das andere nicht, kann ich dir leider auch nicht sagen (und
mangels VB6 auch nicht testen). Ruf im Fehlerfall mal GetLastError
auf.

In welchen DLLs die Controls liegen, sollte eigentlich egal sein.
Hast du dasselbe schonmal in einem einzigen Testprojekt versucht?
Vereinfacht auch die Darstellung.

(Wobei die Frage sehr VB6-lastig ist, denn eine permanente hDC-
Eigenschaft noch dazu in Kombination mit Autoredraw ist keine
Windows-Angelegenheit.)

Armin

Ähnliche fragen