Benutzer mit den meisten Antworten
Windows 7 andocken bei Aero Fenster?

Frage
-
Ich habe mal wieder ein Problem.
Ich habe folgenden Code, um bei Fenstern die Aero Transparenz einzuschaltenn:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential)> Public Structure MARGINS Public cxLeftWidth As Integer Public cxRightWidth As Integer Public cyTopHeight As Integer Public cyButtomheight As Integer End Structure Public Class Form1 Dim lStartPos As Point Private Sub Form1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs _ ) Handles Me.MouseDown If e.Button = Windows.Forms.MouseButtons.Left Then lStartPos = e.Location End If End Sub Private Sub Form1_MouseMove(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs _ ) Handles Me.MouseMove If e.Button = Windows.Forms.MouseButtons.Left Then Dim lDelta As New Point(e.Location.X - lStartPos.X, e.Location.Y - lStartPos.Y) Dim lNewPos = New Point(Me.Location.X + lDelta.X, Me.Location.Y + lDelta.Y) Me.Location = lNewPos End If End Sub Public Declare Function DwmExtendFrameIntoClientArea Lib "dwmapi.dll" (ByVal hWnd As IntPtr, ByRef pMarinset As MARGINS) As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try Me.TransparencyKey = Color.FromArgb(115, 114, 113) Me.BackColor = Color.FromArgb(115, 114, 113) Dim margins As MARGINS = New MARGINS margins.cxLeftWidth = -1 margins.cxRightWidth = -1 margins.cyTopHeight = -1 margins.cyButtomheight = -1 Dim result As Integer = DwmExtendFrameIntoClientArea(Me.Handle, margins) Catch ex As Exception MsgBox(ex.Message) End Try End Sub End Class
Es gibt in Windows 7 ja die möglichkeit, wenn man ein Fenster oben an den Bildschirmrand zieht, dass das Fenster dann Maximiert wird.
Bei meiner Methode funktioniert dass nur, wenn ich wirklich oben in der Leiste ziehe,die man eigentlich auch so schon ziehen kann.Gibts da vielleicht eine möglichkeit?
Antworten
-
Hallo,
Es gibt in Windows 7 ja die möglichkeit, wenn man ein Fenster oben an den Bildschirmrand zieht, dass das Fenster dann Maximiert wird.
Bei meiner Methode funktioniert dass nur, wenn ich wirklich oben in der Leiste ziehe,die man eigentlich auch so schon ziehen kann.
das hatte ich Dir bereits in der Antwort auf Deine Frage vom 16.07. geschrieben, mit genau dem Hinweis, dass das unter Windows 7 alleine mit der Maus nicht schön umzusetzen ist:
"Nachteil dieser Variante: Das Docking des Fensters, wenn die Maus den Bildschirmrand berührt, funktioniert so nicht. Das wäre bei einem Fenster mit fixer Größe zu vernachlässigen, bei Fenstern die in der größe veränderbar sind, kann das für den Anwender störend wirken. Hier erfolgt das Verschieben dann durch Windows, indem man vorgibt, die Maustaste wäre auf der Titelleiste gedrückt worden:"
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert MaSch0212 Freitag, 20. August 2010 19:51
Alle Antworten
-
Hallo,
Es gibt in Windows 7 ja die möglichkeit, wenn man ein Fenster oben an den Bildschirmrand zieht, dass das Fenster dann Maximiert wird.
Bei meiner Methode funktioniert dass nur, wenn ich wirklich oben in der Leiste ziehe,die man eigentlich auch so schon ziehen kann.
das hatte ich Dir bereits in der Antwort auf Deine Frage vom 16.07. geschrieben, mit genau dem Hinweis, dass das unter Windows 7 alleine mit der Maus nicht schön umzusetzen ist:
"Nachteil dieser Variante: Das Docking des Fensters, wenn die Maus den Bildschirmrand berührt, funktioniert so nicht. Das wäre bei einem Fenster mit fixer Größe zu vernachlässigen, bei Fenstern die in der größe veränderbar sind, kann das für den Anwender störend wirken. Hier erfolgt das Verschieben dann durch Windows, indem man vorgibt, die Maustaste wäre auf der Titelleiste gedrückt worden:"
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert MaSch0212 Freitag, 20. August 2010 19:51
-
Oh ja... Danke...
Das ist mir jetzt peinlich.
Ich war so auf den Code fixiert, dass ich die zweite Methode von dir einfach übersehen habe!
Also heißt der Code, den ich gebraucht habe:
Private Const WM_NCLBUTTONDOWN As Integer = &HA1& Private Const HTCAPTION As Integer = 2& Private Declare Sub ReleaseCapture Lib "User32" () Private Sub Form1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs _ ) Handles Me.MouseDown If e.Button = Windows.Forms.MouseButtons.Left Then ReleaseCapture() Dim m As New Message() m.HWnd = Me.Handle m.Msg = WM_NCLBUTTONDOWN m.WParam = New IntPtr(HTCAPTION) Me.WndProc(m) End If End Sub
So funktioniert es dann.
Danke