KinectRegion HandPointer光标作为Awesomium浏览器中的鼠标光标

时间:2013-05-30 13:52:57

标签: c# wpf visual-studio-2012 awesomium kinect-sdk

我想将kinect手形光标用作“普通”鼠标光标。具体来说,我希望能够与Awesomium浏览器对象进行交互。

问题是当kinect手形光标(例如)通过链接,或者我点击或任何其他典型的鼠标事件时,不会引发Awesomium Browser事件。

我修改了可以在Kinect SDK的示例目录中找到的Control Basics-WPF示例程序

我正在使用c#visual studio 2012,Kinect SDK 1.7,Awesomium 1.7.1。

1 个答案:

答案 0 :(得分:4)

自问这个问题以来已经过了一个月,所以也许你已经找到了自己的解决方案。

无论如何,我也发现自己处于这种情况,这是我的解决方案:

在MainWindow.xaml中,您需要KinectRegion中的Awesomium控件(来自SDK)。

您必须以某种方式告诉SDK您希望控件也处理手事件。您可以通过在Window_Loaded处理程序中添加MainWindow.xaml.cs来实现此目的:

KinectRegion.AddHandPointerMoveHandler(webControl1, OnHandleHandMove);
KinectRegion.AddHandPointerLeaveHandler(webControl1, OnHandleHandLeave);

在MainWindow.xaml.cs的其他地方,您可以定义手动处理程序事件。顺便说一句,我是这样做的:

    private void OnHandleHandLeave(object source, HandPointerEventArgs args)
    {
        // This just moves the cursor to the top left corner of the screen.
        // You can handle it differently, but this is just one way.
        System.Drawing.Point mousePt = new System.Drawing.Point(0, 0);
        System.Windows.Forms.Cursor.Position = mousePt;
    }

    private void OnHandleHandMove(object source, HandPointerEventArgs args)
    {
        // The meat of the hand handle method.
        HandPointer ptr = args.HandPointer;
        Point newPoint = kinectRegion.PointToScreen(ptr.GetPosition(kinectRegion));
        clickIfHandIsStable(newPoint); // basically handle a click, not showing code here
        changeMouseCursorPosition(newPoint); // this is where you make the hand and mouse positions the same!
    }

    private void changeMouseCursorPosition(Point newPoint)
    {
        cursorPoint = newPoint;
        System.Drawing.Point mousePt = new System.Drawing.Point((int)cursorPoint.X, (int)cursorPoint.Y);
        System.Windows.Forms.Cursor.Position = mousePt;
    }

对我来说,棘手的部分是: 1.深入了解SDK并确定要添加的处理程序。文档对此没有太大帮助。 2.将鼠标光标映射到kinect手。如您所见,它涉及处理System.Drawing.Point(与另一个库的Point分开)和System.Windows.Forms.Cursor(与另一个库的Cursor分开)。