Window-Management

11/06/2013 - 22:00 von Lothar Geyer | Report spam
In meiner MDI-Anwendung starte ich eine nicht-MDI-Client-Form. Und zwar
im Vordergrund, aber nicht aktiviert:

SetWindowPos Me.hWnd, HWND_TOPMOST, _
0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW _
Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOOWNERZORDER

Falls ihn die Form aktuell stört, kann der Benutzer die Form minimieren
und mit anderen MDIchild-Forms weiter arbeiten. Damit er die Form in der
Taskleiste aber nicht vergisst, soll sie nach einiger Zeit wieder
aufgepoppt werden. Dazu habe ich in einem Timer-Event die Anweisungen

If Me.WindowState = vbMinimized Then
Me.WindowState = vbNormal
End If

Das führt aber dazu, dass diese Form den Fokus bekommt. Ein Aufruf von
SetWindowPos (wie oben) àndert daran auch nichts. Und wenn ich nur
SetWindowPos (ohne Me.WindowState = vbNormal) durchführe, poppt die Form
nicht auf. Ich finde einfach keine Parameter-Kombination, die das tut,
was ich will: Anzeige der Form so wie beim ersten Aufruf von
SetWindowPos: "vbNormal" vor allen anderen Masken, aber nicht aktiviert.

Wer hilft mir bitte?

Lothar Geyer
 

Lesen sie die antworten

#1 Schmidt
11/06/2013 - 22:55 | Warnen spam
Am 11.06.2013 22:00, schrieb Lothar Geyer:

If Me.WindowState = vbMinimized Then
Me.WindowState = vbNormal
End If

Das führt aber dazu, dass diese Form den Fokus bekommt. Ein Aufruf von
SetWindowPos (wie oben) àndert daran auch nichts. Und wenn ich nur
SetWindowPos (ohne Me.WindowState = vbNormal) durchführe, poppt die Form
nicht auf. Ich finde einfach keine Parameter-Kombination, die das tut,
was ich will: Anzeige der Form so wie beim ersten Aufruf von
SetWindowPos: "vbNormal" vor allen anderen Masken, aber nicht aktiviert.



SetWindowPos ist IMO nicht der passende API-Call, um hWnds
bzw. deren "Show-States" zu manipulieren.

ShowWindow hWnd, ...
wàre stattdessen der geeignetere Aufruf. Inwieweit hier
allerdings der Fokus verhinderbar ist, müsstest Du mal
(möglicherweise über eine passende Oder-Verknüpung) mit
den folgenden Enum-Werten durchspielen.

Private Declare Function ShowWindow Lib "user32" _
(ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Private Enum ShowWinStates
SW_HIDE = 0
SW_SHOWNORMAL = 1
SW_NORMAL = 1
SW_SHOWMINIMIZED = 2
SW_SHOWMAXIMIZED = 3
SW_MAXIMIZE = 3
SW_SHOWNOACTIVATE = 4
SW_SHOW = 5
SW_MINIMIZE = 6
SW_SHOWMINNOACTIVE = 7
SW_SHOWNA = 8
SW_RESTORE = 9
SW_SHOWDEFAULT = 10
SW_FORCEMINIMIZE = 11
SW_MAX = 11
End Enum

Olaf

Ähnliche fragen