아키텍처 개요

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

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

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

illustration showing how windows 7 sends messages from multitouch hardware to an application

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

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

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

조작 및 관성

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

illustration showing windows touch messages passed to an object's manipulation processor, which handles events with the -imanipulationevents interface

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

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

illustration showing windows touch messages passed to an object's iinertiaprocessor interface, which raises events with -imanipulationevents interface

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

프로그래밍 가이드