Laden...

WM_SETREDRAW & Taskleiste

Letzter Beitrag vor 13 Jahren 4 Posts 1.167 Views
WM_SETREDRAW & Taskleiste

Hallo.

Folgendes Problem, häng da schon paar Stunden dran:

Wenn ich eine Form mit folgenden Code ausführe, wird das Fenster danach (zumindest bei Windows Vista/7) nicht sofort in der Taskbar angezeigt. Man muss es erst erneut aktivieren (2x Alt+Tab oder so).

        Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)

            Native.User32.SendMessage(Me.Handle, Native.EnumWindowMessages.WM_SETREDRAW, New IntPtr(0), New IntPtr(0))

            Me.MinimumSize = New Size(Me.MinimumSize.Width, 500)
            Me.MaximumSize = New Size(If(Me.MaximumSize.Width > 0, Me.MaximumSize.Width, 19999), 500)

            Native.User32.SendMessage(Me.Handle, Native.EnumWindowMessages.WM_SETREDRAW, New IntPtr(1), New IntPtr(0))

            MyBase.OnLoad(e)
        End Sub

Der Code ist natürlich nur ein abstrahiertes Beispiel. Das Problem ist, das Phänomen tritt auch auf, wenn derartige Sachen auf Controls irgendwo auf dem Form passieren. Scheinbar wird genau dies auch bei von uns eingekauften Steuerelementen gemacht, auf die wir keinen Einfluss haben.

Nun meine Frage:
Bekommt man das Fenster über irgend einen Befehl/WindowMessage in die Taskbar ohne Umweg über das ShowInTaskbar-Property? Damit funktioniert es erstmal, Workaround:

If Not Modal Then
    ShowInTaskbar = False
    ShowInTaskbar = True
End If

Nachteil: durch wieder auf True setzen schließt sich das Formular kurz und erscheint danach erneut. Ok, bisschen mit Opacity rumgespielt (ich weiß, würg ^^) und das Flackern ist weg. Nur hilft das nicht bei modalen Fenstern -> die gehen einfach wieder zu (deshalb das If).

bin echt ratlos, weshalb diese Sache überhaupt auftritt oder wie man das Form besser wieder in die Taskbar zurück bekommt. Hoffe mir kann hier wer helfen.

Danke, Lars.

Was hast du im OnLoad da genau vor? Was möchtest du erreichen?

Prinzipiell nutze ich dieses Vorgehen für meine eingene Layoutengine auf Controls, um das Resize performanter zu machen und das Geflackere zu unterdrücken. Funktioniert auch super soweit bis auf das Taskleistenmanko. Und ich habe jetzt eben mitbekommen, dass scheinbar nicht nur ich das mache, sondern auch Controls-Hersteller, da ich meine Refresh-Sache deaktiviert habe und das Phänomen trotzdem noch auftritt...

Hat keiner eine Idee zu dem Problem? Schade. 😦 Wir haben die ganze Logik mal ins OnLoad gelegt, da erscheint das Fenstericon in der Taskbar. Aber das Geflackere kann man dann auch keinem anbieten.