WPF學習日誌 ~ CaptureMouse ~

CaptureMouse顧名思義是捕捉滑鼠,那捕捉滑鼠要做什麼呢?
當我們捕捉住滑鼠的訊號之後,當滑鼠離開了Winddow的範圍之外,我們仍然可以收到MouseMove以及MouseUp的事件,這可以利用在縮/放部分

CaptureMouse顧名思義是捕捉滑鼠,那捕捉滑鼠要做什麼呢?
當我們捕捉住滑鼠的訊號之後,當滑鼠離開了Winddow的範圍之外,我們仍然可以收到MouseMove以及MouseUp的事件,這可以利用在縮/放部分,如果你有用過Blend(或是跑過DirectX的sample)的話,在調整(縮/放)工作區大小時,是類似的感覺;下面測試捕捉滑鼠,利用移動的距離來改變TextBlock的字體大小,執行結果像是下圖這樣


下面我們來看看測試的程式碼

Class Window1
    Dim sp As StackPanel
    Dim tb As TextBlock
    Dim p As New Point
 
    Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
        sp = New StackPanel
        tb = New TextBlock
        tb.Text = "Some String here"
        tb.Background = Brushes.AliceBlue
        tb.HorizontalAlignment = Windows.HorizontalAlignment.Center
        tb.VerticalAlignment = Windows.VerticalAlignment.Center
        sp.Children.Add(tb)
        Me.Content = sp
    End Sub
 
    Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Input.MouseEventArgs)
        MyBase.OnMouseMove(e)
        If e.LeftButton = MouseButtonState.Pressed Then
            Me.Title = e.GetPosition(sp).X & "," & e.GetPosition(sp).Y
            If (e.GetPosition(sp).X - p.X) > 30 Then
                tb.FontSize += 2
                p = e.GetPosition(sp)
            ElseIf (e.GetPosition(sp).X - p.X) < -30 Then
                If tb.FontSize > 8 Then
                    tb.FontSize -= 2
                End If
                p = e.GetPosition(sp)
            End If
        End If
    End Sub
 
    Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Input.MouseButtonEventArgs)
        MyBase.OnMouseDown(e)
        p = e.GetPosition(sp)
        Me.CaptureMouse()
    End Sub
 
    Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Input.MouseButtonEventArgs)
        MyBase.OnMouseUp(e)
        ReleaseMouseCapture()
    End Sub
End Class