WindowsC # 示例中的触摸手势 (MTGesturesCS)

本部分介绍了 c # 中的 Windows 触摸笔势示例。

此 Windows 触摸笔势示例演示如何使用笔势消息通过处理 WM_GESTURE消息来转换、旋转和缩放由图形设备接口 (GDI) 呈现的框。 下面的屏幕截图显示了该示例在运行时的外观。

屏幕截图,其中显示了在 c 中使用的 windows 触摸笔势,并在屏幕上居中显示了黑色空心矩形

对于本示例,笔势消息传递给笔势引擎,后者随后调用有关绘图对象的方法来转换、旋转和缩放具有处理这些命令的方法的对象。 若要在 c # 中实现这一点,可以创建一个特殊形式 TouchableForm 来处理手势消息。 然后,此窗体使用消息对图形对象 DrawingObject 进行更改,以更改对象在画图方法中的呈现方式。

若要帮助演示示例的工作方式,请考虑使用平移命令转换呈现的框的步骤。 用户执行平移手势,该手势会生成一个 WM_GESTURE 的消息,其中包含一个手势标识符 GID_PAN。 TouchableForm 处理此消息并更新图形对象的位置,然后,该对象将呈现自身。

下面的代码演示了该笔势处理程序如何从 WM_GESTURE 消息中检索参数,然后通过调用绘图对象的 move 方法对呈现的框执行转换。

            switch (gi.dwID)
            {
                case GID_BEGIN:
                case GID_END:
                    break;
               (...)
                case GID_PAN:
                    switch (gi.dwFlags)
                    {
                        case GF_BEGIN:
                            _ptFirst.X = gi.ptsLocation.x;
                            _ptFirst.Y = gi.ptsLocation.y;
                            _ptFirst = PointToClient(_ptFirst);
                            break;

                        default:
                            // We read the second point of this gesture. It is a
                            // middle point between fingers in this new position
                            _ptSecond.X = gi.ptsLocation.x;
                            _ptSecond.Y = gi.ptsLocation.y;
                            _ptSecond = PointToClient(_ptSecond);

                            // We apply move operation of the object
                            _dwo.Move(_ptSecond.X - _ptFirst.X, _ptSecond.Y - _ptFirst.Y);

                            Invalidate();

                            // We have to copy second point into first one to
                            // prepare for the next step of this gesture.
                            _ptFirst = _ptSecond;
                            break;
                    }
                    break;

下面的代码演示绘图对象的 move 方法如何更新内部位置变量。

        public void Move(int deltaX,int deltaY)
        {
            _ptCenter.X += deltaX;
            _ptCenter.Y += deltaY;
        }

下面的代码演示如何在绘图对象的 paint 方法中使用该位置。

public void Paint(Graphics graphics)
        {
(...)
            for (int j = 0; j < 5; j++)
            {
                int idx = arrPts[j].X;
                int idy = arrPts[j].Y;

                // rotation
                arrPts[j].X = (int)(idx * dCos + idy * dSin);
                arrPts[j].Y = (int)(idy * dCos - idx * dSin);

                // translation
                arrPts[j].X += _ptCenter.X;
                arrPts[j].Y += _ptCenter.Y;
            }
(...)
        }

平移手势将导致绘制的框已平移。

多点触控手势应用程序 (c # ) 多点触控手势应用程序 (c + +) Windows 触控示例