[VB6] Message WM_CHILDACTIVATE

23/06/2010 - 23:06 von Lothar Geyer | Report spam
Durch Auswertung der Message WM_CHILDACTIVATE versuche ich, das zuletzt
aktive MDI-Fenster festzuhalten. Der Source schaut in etwa so aus:

CallWndProc = CallNextHookEx(WH_CALLWNDPROC, _
lProcessCode, lSentByCurrentThread, udtCWP)

If udtCWP.Message = WM_CHILDACTIVATE Then
Dim Frm As Form
For Each Frm In Forms
If Frm.hwnd = udtCWP.hwnd Then
Set LastActiveForm = Frm
...

Das funktioniert auch soweit. Nur in einem speziellen Fall nicht - und
ich kann mir nicht erklàren, warum nicht.

In einer Form F1 starte ich eine Form F2 mit folgenden Anweisungen:

Me.Enabled = False
Set myFrm2 = New frmFrm2
myFrm2.Start Me, Par1, Par2

Die F2 tut was und das Ergebnis kommt über einen Event an die F1 zurück.
In der Event-Routine steht:

Me.Enabled = True
Me.ZOrder 0
Unload myFrm2
Set myFrm2 = Nothing

Wenn ich mir am Ende der Event-Routine oder auch am Ende des
_Activate-Events von F1 die LastActiveForm ansehe, dann ist diese
Variable Nothing. Warum? Wann genau wird die WM_CHILDACTIVATE geschickt?

Wenn die Event-Routine in F1 gelaufen ist, ist LastActiveForm = Nothing.
Wenn ich dann eine beliebige andere Form anklicke und dann wieder die
F1, dann steht LastActiveForm auf F1, so wie gewünscht.

Irgendwie scheint das also mit der F2 zusammen zuhàngen. Aber wie?

Und wie schon geschrieben: bei anderen Forms, die per Mausklick
aktiviert oder über das Menü gestartet wurden, funktioniert alles pràchtig.

Lothar Geyer
 

Lesen sie die antworten

#1 W. Wolf
24/06/2010 - 07:24 | Warnen spam
Hallo Lothar,
"Lothar Geyer" schrieb

[...]
Me.Enabled = False
Set myFrm2 = New frmFrm2
myFrm2.Start Me, Par1, Par2

Die F2 tut was und das Ergebnis kommt über einen Event an die F1 zurück.
In der Event-Routine steht:

Me.Enabled = True
Me.ZOrder 0
Unload myFrm2
Set myFrm2 = Nothing



[...]
Hast Du schon ein explizites
call SetActiveWindow(me.hwnd)
versucht?
Declare Function SetActiveWindow Lib "user32" _
(ByVal Hwnd As Long) As Long

Schönen Gruß
W. Wolf

Ähnliche fragen