首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

Windows 8 開發入門(四):指標事件全面取代傳統滑鼠事件

     編輯:關於C#

Windows 8 統一觸控/滑鼠/筆輸入為 Pointer 事件,六大核心事件取代舊版滑鼠事件:

事件觸發時機
PointerWheelChanged滑鼠滾輪滾動
PointerPressed按下(滑鼠左鍵/手指觸碰)
PointerReleased釋放(滑鼠放開/手指離開)
PointerEntered進入控制項有效區域
PointerMoved在區域內移動
PointerExited離開控制項區域

XAML:Canvas 綁定六大事件

<Canvas Name="MainCanvas" Width="600" Height="300" Background="Cornsilk"
        PointerWheelChanged="MainCanvas_PointerWheelChanged"
        PointerPressed="MainCanvas_PointerPressed"
        PointerReleased="MainCanvas_PointerReleased"
        PointerMoved="MainCanvas_PointerMoved"
        PointerExited="MainCanvas_PointerExited"
        PointerEntered="MainCanvas_PointerEntered"></Canvas>

<TextBlock Name="tbLabel" Foreground="Gold" .../> <!-- 即時座標/動作 -->
<TextBlock Name="tbLabelNext" Foreground="Gold" .../> <!-- 進入/離開 -->
<TextBlock Name="tbLabelFore" Foreground="Gold" .../> <!-- 拖曳方向判斷 -->

後端完整邏輯:座標追蹤與拖曳方向判斷

public sealed partial class MainPage : Page {
    Point start = new Point();

    // 滾輪
    private void MainCanvas_PointerWheelChanged(object sender, PointerRoutedEventArgs e) {
        tbLabel.Text = "滑動了一次滑鼠滾輪";
    }

    // 按下:記錄起始點
    private void MainCanvas_PointerPressed(object sender, PointerRoutedEventArgs e) {
        start = e.GetCurrentPoint(MainCanvas).Position;
        tbLabel.Text = "點擊了一次滑鼠或螢幕";
    }

    // 釋放:計算向量角度判斷四大方向
    private void MainCanvas_PointerReleased(object sender, PointerRoutedEventArgs e) {
        var end = e.GetCurrentPoint(MainCanvas).Position;
        double angle = 0;

        if (Math.Abs(end.X - start.X) < 1 && Math.Abs(end.Y - start.Y) < 1) {
            angle = 0; // 點擊未移動
        } else if (end.X > start.X) {
            angle = (end.Y > start.Y)
                ? 360 - Math.Atan((end.Y - start.Y) / (end.X - start.X)) * 180 / Math.PI
                : Math.Atan((start.Y - end.Y) / (end.X - start.X)) * 180 / Math.PI;
        } else if (end.X < start.X) {
            angle = (end.Y > start.Y)
                ? Math.Atan((end.Y - start.Y) / (start.X - end.X)) * 180 / Math.PI + 180
                : 180 - Math.Atan((start.Y - end.Y) / (start.X - end.X)) * 180 / Math.PI;
        }

        if (angle == 0) tbLabel.Text = "點擊了一次滑鼠或螢幕";
        else if (angle >= 45 && angle < 135) tbLabelFore.Text = "從下往上";
        else if (angle <= 45 || angle > 315) tbLabelFore.Text = "從左向右滑";
        else if (angle >= 135 && angle < 225) tbLabelFore.Text = "從右向左滑";
        else if (angle >= 225 && angle < 315) tbLabelFore.Text = "從上往下";
    }

    // 移動:即時座標
    private void MainCanvas_PointerMoved(object sender, PointerRoutedEventArgs e) {
        var p = e.GetCurrentPoint(MainCanvas).Position;
        tbLabel.Text = $"滑鼠正在移動 X:{p.X}, Y:{p.Y}";
    }

    private void MainCanvas_PointerExited(object sender, PointerRoutedEventArgs e) {
        tbLabelNext.Text = "滑鼠移出作用範圍";
    }

    private void MainCanvas_PointerEntered(object sender, PointerRoutedEventArgs e) {
        tbLabelNext.Text = "滑鼠進入範圍";
    }
}
Pointer 事件即時回饋畫面
圖 1:滑鼠移動座標、滾輪、拖曳方向即時顯示

原始碼下載:Win8Event.zip

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved