아키텍처 개요

이 아키텍처 개요는 태블릿 및 터치 기술용 Windows Touch API에 대한 컨텍스트를 제공하고 더 큰 Windows 7 아키텍처에 어떻게 적합한지 설명합니다.

Windows Touch 입력 및 제스처에 대한 메시지

Windows Touch에 대한 메시징 기능은 실행 중에 메시지를 수신 대기하고 해석하여 사용하도록 설정됩니다. 다음 그림에서는 메시지가 하드웨어에서 생성되고 Windows 7에서 애플리케이션으로 전송되는 방법을 보여 줍니다.

windows 7이 멀티터치 하드웨어에서 애플리케이션으로 메시지를 보내는 방법을 보여 주는 그림

그림의 맨 왼쪽 열에서 터치 감지 하드웨어는 사용자로부터 입력을 받습니다. 그런 다음 드라이버는 하드웨어와 OS 간에 통신합니다. 다음으로 OS는 애플리케이션의 HWND 로 전송되는 WM_TOUCH 또는 WM_GESTURE 메시지를 생성합니다. 그런 다음, 메시지에 캡슐화된 정보가 제공되면 애플리케이션에서 UI를 업데이트합니다.

애플리케이션은 기본적으로 제스처를 받습니다. 애플리케이션이 RegisterTouchWindow 함수를 사용하여 Windows Touch 입력 메시지에 등록하지 않는 한 제스처에 대한 알림(WM_GESTURE 메시지)은 Windows에서 만들어지고 해당 애플리케이션 창으로 전송됩니다. 애플리케이션 창이 터치 메시지를 수신하도록 등록하면 Windows Touch 입력(WM_TOUCH 메시지)에 대한 알림이 해당 애플리케이션 창으로 전송됩니다. Windows Touch 및 제스처 메시지는 터치가 수행되거나 애플리케이션 창에서 제스처가 시작된 후 제스처가 완료되거나 기본 터치가 완료될 때까지 모든 메시지가 해당 애플리케이션으로 전송된다는 점에서 탐욕입니다.

레거시 지원을 위해 Windows는 WM_GESTURE 메시지가 버블링된 경우 해석한 다음 제스처에 매핑되는 적절한 메시지를 보내거나 게시합니다. 레거시 지원이 중단되지 않도록 하려면 DefWindowProc을 사용하여 WM_GESTURE 메시지를 전달해야 합니다. 레거시 지원에 대한 자세한 내용은 Windows 터치 제스처 개요 섹션에서 찾을 수 있습니다.

조작 및 관성

Windows Touch 프로그래머는 수행되는 제스처에 의미 있는 방식으로 여러 원본의 제스처를 해석할 수 있어야 합니다. Microsoft는 이러한 계산을 수행하기 위한 조작 API를 제공합니다. 조작은 기본적으로 전체 제스처를 설명하는 값과 연결된 제스처입니다. 입력 데이터를 조작 프로세서에 연결한 후에는 사용자가 개체에 대해 수행한 작업과 관련한 정보를 검색할 수 있습니다. 다음 그림에서는 조작을 사용할 수 있는 한 가지 방법을 보여 줍니다.

-imanipulationevents 인터페이스를 사용하여 이벤트를 처리하는 개체의 조작 프로세서에 전달된 Windows 터치 메시지를 보여 주는 일러스트레이션

그림의 왼쪽 위에서 사용자가 터치 메시지를 만드는 화면을 터치했습니다. 이러한 메시지에는 포커스가 있는 개체를 결정하는 데 사용되는 x 좌표와 y 좌표가 포함됩니다. 포커스에 있는 개체에는 조작 프로세서가 포함됩니다. 다음으로 , TOUCHEVENTF_UP 플래그가 있는 WM_TOUCH 메시지에서 사용자의 포커스에 있는 개체가 선택되고, 조작 프로세서가 참조되고, 메시지가 조작 프로세서로 전송됩니다. 이 연락처와 연결된 후속 WM_TOUCH 메시지는 TOUCHEVENTF_UP 플래그가 있는 WM_TOUCH 메시지가 수신되고 선택한 개체가 역참조될 때까지 조작 프로세서로 전송됩니다. 그림의 오른쪽 아래 섹션에서 는 _IManipulationEvents 인터페이스를 구현하는 조작 이벤트 싱크를 사용하여 터치 메시지를 만드는 동안 발생하는 조작 이벤트를 처리합니다. 이벤트 싱크는 발생하는 동안 조작 이벤트에 따라 인터페이스에 대한 업데이트를 수행할 수 있습니다.

Windows Touch 애플리케이션에서는 개체가 더 이상 터치되지 않을 때 갑자기 중지되지 않고 원활하게 중지되도록 간단한 물리학을 통합하는 것이 일반적입니다. Microsoft는 애플리케이션이 다른 애플리케이션과 유사한 방식으로 동작할 수 있도록 이러한 간단한 물리학에 대한 계산을 수행하는 관성 API를 제공합니다. 또한 강력한 물리학 기능을 만드는 데 필요한 노력을 절약할 수 있습니다. 다음 그림에서는 관성 사용 방법을 보여줍니다.

-imanipulationevents 인터페이스를 사용하여 이벤트를 발생시키는 개체의 iinertiaprocessor 인터페이스에 전달된 Windows 터치 메시지를 보여 주는 일러스트레이션

관성과 조작 간의 유사성을 확인합니다. 둘 사이의 유일한 차이점은 관성의 경우 해석된 메시지가 조작 프로세서가 아닌 관성 프로세서에 전달되고 관성 프로세서가 이벤트를 발생한다는 것입니다. 그림의 왼쪽 위에 있는 TOUCHEVENTF_UP 플래그가 있는 WM_TOUCH 메시지에서 터치 메시지는 관성 프로세서와 조작 프로세서가 포함된 포커스의 개체를 식별하는 데 사용됩니다. 후속 WM_TOUCH 메시지는 조작 프로세서로 전송되고 조작 프로세서는 애플리케이션 UI에 대한 업데이트를 수행합니다. 조작이 완료되면 조작의 속도 값이 관성 프로세서를 설정하는 데 사용됩니다. 중간 열에 설명된 것처럼 프로세스 또는 ProcessTime 메서드는 호출이 프로세서 처리가 완료되었음을 나타낼 때까지 별도의 스레드에서 타이머 또는 기타 루프를 사용하여 IInertiaProcessor 인터페이스에서 호출됩니다. 이러한 호출이 이루어지는 동안 _IManipulationEvents 인터페이스를 기반으로 조작 이벤트 싱크에서 처리되는 조작 이벤트가 발생합니다. 그림의 오른쪽 아래 섹션에서 이 이벤트 싱크는 이벤트 싱크의 이벤트 처리기를 통해 발생하는 조작 이벤트를 기반으로 애플리케이션 UI에 대한 업데이트를 수행합니다.

프로그래밍 가이드