C #의 Windows Touch 제스처 샘플 (MTGesturesCS)Windows Touch Gestures in C# Sample (MTGesturesCS)

이 섹션에서는 c #의 Windows Touch 제스처 샘플에 대해 설명 합니다.This section describes the Windows Touch Gestures sample in C#.

이 Windows Touch 제스처 샘플에서는 WM_GESTURE 메시지를 처리 하 여 그래픽 장치 인터페이스 (GDI)에서 렌더링 되는 상자를 변환, 회전 및 크기 조정 하는 제스처 메시지를 사용 하는 방법을 보여 줍니다.This Windows Touch Gestures sample demonstrates how to use gesture messages to translate, rotate, and scale a box rendered by the Graphics Device Interface (GDI) by handling the WM_GESTURE message. 다음 스크린 샷에서는 샘플이 실행 되는 동안 표시 되는 모양을 보여 줍니다.The following screen shot shows how the sample looks when it is running.

화면 가운데에 검은색 흰색 사각형을 사용 하 여 실행 되는 c # 샘플의 windows 터치 제스처를 보여 주는 스크린샷

이 샘플의 경우 제스처 메시지는 제스처 엔진에 전달 됩니다. 그러면이 엔진은 그리기 개체에서 메서드를 호출 하 여 이러한 명령을 처리 하는 메서드가 포함 된 개체를 변환, 회전 및 크기 조정 합니다.For this sample, gesture messages are passed to a gesture engine which then calls methods on drawing objects to translate, rotate, and scale an object that has methods for handling these commands. C #에서이 작업을 가능 하 게 하려면 제스처 메시지를 처리 하기 위해 특수 형식인 TouchableForm를 만듭니다.To make this possible in C#, a special form, TouchableForm, is created to handle gesture messages. 그런 다음이 폼은 메시지를 사용 하 여 그리기 개체 DrawingObject를 변경 하 여 Paint 메서드에서 개체가 렌더링 되는 방식을 변경 합니다.This form then uses the messages to make changes on a drawing object, DrawingObject, to change how the object renders in the Paint method.

예제가 작동 하는 방식을 보여 주기 위해 pan 명령을 사용 하 여 렌더링 된 상자를 변환 하는 단계를 살펴봅니다.To help show how the sample works, consider the steps for using the pan command to translate the rendered box. 사용자는 제스처 식별자 GID_PAN를 사용 하 여 WM_GESTURE 메시지를 생성 하는 이동 제스처를 수행 합니다.A user performs the pan gesture which generates a WM_GESTURE message with the gesture identifier GID_PAN. TouchableForm는이 메시지를 처리 하 고 그리기 개체의 위치를 업데이트 합니다. 그러면 개체가 자동으로 변환 됩니다.The TouchableForm handles this messages and updates the position of the drawing object, and the object will then render itself translated.

다음 코드는 제스처 처리기가 WM_GESTURE 메시지에서 매개 변수를 검색 한 다음 그리기 개체의 move 메서드를 호출 하 여 렌더링 된 상자에서 변환을 수행 하는 방법을 보여 줍니다.The following code shows how the gesture handler retrieves parameters from the WM_GESTURE message and then performs translation on the rendered box through a call to the drawing object's move method.

            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 메서드가 내부 위치 변수를 업데이트 하는 방법을 보여 줍니다.The following code shows how the drawing object's move method updates internal position variables.

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

다음 코드에서는 그리기 개체의 paint 메서드에서 위치를 사용 하는 방법을 보여 줍니다.The following code shows how the position is used in the drawing object's paint method.

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;
            }
(...)
        }

이동 제스처는 그려지는 상자를 변환 하 여 렌더링 합니다.Pan gestures will cause the drawn box to be rendered translated.

멀티 터치 제스처 응용 프로그램 (c #), 다중 터치 제스처 응용 프로그램 (c + +), Windows touch 샘플Multi-touch Gestures Application (C#), Multi-touch Gestures Application (C++), Windows Touch Samples