none
Windows 7 andocken bei Aero Fenster? RRS feed

  • 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?

    Donnerstag, 19. August 2010 22:19

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
    Freitag, 20. August 2010 05:07
    Moderator

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
    Freitag, 20. August 2010 05:07
    Moderator
  • 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

    Freitag, 20. August 2010 19:52