다음을 통해 공유


WM_POINTERUPDATE 메시지

창의 클라이언트 영역이나 창의 클라이언트 영역에 대한 가리키지 않은 포인터에 대한 연락처를 만든 포인터에 대한 업데이트를 제공하기 위해 게시됩니다. 포인터가 가리키고 있는 동안 메시지는 포인터가 끝난 창을 대상으로 합니다. 포인터가 표면과 접촉하는 동안 포인터는 포인터가 접촉한 창에 암시적으로 캡처되고 해당 창은 접촉이 끊어지도록 포인터에 대한 입력을 계속 받습니다.

! [중요]
데스크톱 앱은 DPI를 인식해야 합니다. 앱이 DPI를 인식하지 못하는 경우 DPI 가상화로 인해 포인터 메시지 및 관련 구조에 포함된 화면 좌표가 부정확해 보일 수 있습니다. DPI 가상화는 DPI를 인식하지 않고 기본적으로 활성 상태인 애플리케이션에 대한 자동 크기 조정 지원을 제공합니다(사용자가 해제할 수 있음). 자세한 내용은 쓰기 High-DPI Win32 애플리케이션참조하세요.

#define WM_POINTERUPDATE              0x0245

매개 변수

wParam

포인터에 대한 정보를 포함합니다. 다음 매크로를 사용하여 wParam 매개 변수에서 정보를 검색합니다.

  • GET_POINTERID_WPARAM(wParam): 포인터 식별자입니다.

  • IS_POINTER_NEW_WPARAM(wParam): 이 메시지가 새 포인터에 의해 생성된 첫 번째 입력을 나타내는지 여부를 나타내는 플래그입니다.

  • IS_POINTER_INRANGE_WPARAM(wParam): 이 메시지가 수명 동안 포인터에 의해 생성되었는지 여부를 나타내는 플래그입니다. 이 플래그는 포인터가 검색 범위를 떠났다는 것을 나타내는 메시지에 설정되지 않습니다.

  • IS_POINTER_INCONTACT_WPARAM(wParam): 창 화면과 접촉하는 포인터에 의해 이 메시지가 생성되었는지 여부를 나타내는 플래그입니다. 이 플래그는 가리키기 포인터를 나타내는 메시지에 설정되지 않습니다.

  • IS_POINTER_PRIMARY_WPARAM(wParam): 이 포인터가 기본 포인터로 지정되었음을 나타냅니다.

  • IS_POINTER_FIRSTBUTTON_WPARAM(wParam): 기본 작업이 있는지 여부를 나타내는 플래그입니다.

    • 이는 마우스 왼쪽 단추 아래쪽과 유사합니다.
    • 터치 포인터는 디지타이저 표면과 접촉할 때 이 집합을 갖습니다.
    • 펜 포인터는 단추를 누르지 않고 디지타이저 표면과 접촉할 때 이 집합을 갖습니다.
  • IS_POINTER_SECONDBUTTON_WPARAM(wParam): 보조 작업이 있는지 여부를 나타내는 플래그입니다.

    • 이는 마우스 오른쪽 단추 아래쪽과 유사합니다.
    • 펜 포인터는 펜 배럴 단추를 눌렀을 때 디지타이저 표면과 접촉할 때 이 집합을 갖습니다.
  • IS_POINTER_THIRDBUTTON_WPARAM(wParam): 포인터 형식에 따라 하나 이상의 3차 작업이 있는지 여부를 나타내는 플래그입니다. 3차 작업에 응답하려는 애플리케이션은 포인터 유형과 관련된 정보를 검색하여 누를 3차 단추를 결정해야 합니다. 예를 들어 애플리케이션은 GetPointerPenInfo 호출하고 단추 상태를 지정하는 플래그를 검사하여 펜의 단추 상태를 확인할 수 있습니다.

  • IS_POINTER_FOURTHBUTTON_WPARAM(wParam): 지정된 포인터가 네 번째 작업을 수행했는지 여부를 나타내는 플래그입니다. 네 번째 작업에 응답하려는 애플리케이션은 포인터 유형과 관련된 정보를 검색하여 첫 번째 확장 마우스(XButton1) 단추를 눌렀는지 확인해야 합니다.

  • IS_POINTER_FIFTHBUTTON_WPARAM(wParam): 지정된 포인터가 다섯 번째 작업을 수행했는지 여부를 나타내는 플래그. 다섯 번째 작업에 응답하려는 애플리케이션은 포인터 유형과 관련된 정보를 검색하여 두 번째 확장 마우스(XButton2) 단추를 눌렀는지 확인해야 합니다.

    자세한 내용은 포인터 플래그 참조하세요.

    메모

    가리키기 포인터에는 단추 플래그가 설정되지 않습니다. 이는 마우스 단추가 없는 마우스 이동과 유사합니다. 예를 들어 애플리케이션은 GetPointerPenInfo 호출하고 단추 상태를 지정하는 플래그를 검사하여 호버링 펜의 단추 상태를 확인할 수 있습니다.

lParam

포인터의 점 위치를 포함합니다.

메모

포인터가 사소한 영역을 통해 디바이스와 접촉할 수 있으므로 이 지점 위치는 더 복잡한 포인터 영역의 단순화일 수 있습니다. 가능하면 애플리케이션은 지점 위치 대신 전체 포인터 영역 정보를 사용해야 합니다.

다음 매크로를 사용하여 점의 실제 화면 좌표를 검색합니다.

반환 값

애플리케이션이 이 메시지를 처리하는 경우 0을 반환해야 합니다.

애플리케이션이 이 메시지를 처리하지 않으면 DefWindowProc호출해야 합니다.

발언

각 포인터에는 수명 동안 고유한 포인터 식별자가 있습니다. 포인터의 수명은 처음 검색될 때 시작됩니다.

가리키기 포인터가 검색되면 WM_POINTERENTER 메시지가 생성됩니다. 가리키지 않는 포인터가 검색되면 WM_POINTERDOWN 메시지와 WM_POINTERENTER 메시지가 생성됩니다.

포인터는 수명 동안 마우스로 가리키거나 접촉하는 동안 일련의 WM_POINTERUPDATE 메시지를 생성할 수 있습니다.

포인터의 수명은 더 이상 검색되지 않을 때 종료됩니다. 그러면 WM_POINTERLEAVE 메시지가 생성됩니다.

포인터가 중단되면 POINTER_FLAG_CANCELED 설정됩니다.

캡처되지 않은 포인터가 창 범위 밖으로 이동할 때 WM_POINTERLEAVE 메시지가 생성될 수도 있습니다.

포인터의 가로 및 세로 위치를 가져오려면 다음을 사용합니다.

xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam);

MAKEPOINTS 매크로를 사용하여 lParam 매개 변수를 POINTS 구조체로 변환할 수도 있습니다.

GetKeyState 함수를 사용하여 이 메시지와 연결된 키보드 한정자 키 상태를 확인할 수 있습니다. 예를 들어 ALT 키를 눌렀는지 감지하려면 getKeyState (VK_MENU) 0을 < 확인합니다.

애플리케이션이 이 메시지를 처리하지 않는 경우 DefWindowProc 입력 시퀀스가 제스처로 인식되는 경우 하나 이상의 WM_GESTURE 메시지를 생성할 수 있습니다. 제스처가 인식되지 않으면 DefWindowProc 마우스 입력을 생성할 수 있습니다.

애플리케이션에서 일부 포인터 입력을 선택적으로 사용하고 나머지를 DefWindowProc전달하면 결과 동작이 정의되지 않습니다.

GetPointerInfo 함수를 사용하여 이 메시지와 관련된 추가 정보를 검색합니다.

애플리케이션이 이러한 메시지를 생성되는 속도만큼 빠르게 처리하지 않으면 일부 이동이 병합될 수 있습니다. 이 메시지에 병합된 입력의 기록은 GetPointerInfoHistory 함수를 사용하여 검색할 수 있습니다.

예제

다음 코드 예제에서는 GET_X_LPARAM, GET_Y_LPARAM, IS_POINTER_FIRSTBUTTON_WPARAMIS_POINTER_SECONDBUTTON_WPARAM 사용하여 WM_POINTERUPDATE 메시지의 wParam 및 lParam 매개 변수에서 관련 정보를 검색하는 방법을 보여줍니다.

int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);

if (IS_POINTER_PRIMARYBUTTON_WPARAM(wParam))
{
    // process pointer move while down, similar to mouse move with left button down
}
else if (IS_POINTER_SECONDARYBUTTON_WPARAM(wParam))
{
    // process pointer move while down, similar to mouse move with right button down
}

다음 코드 예제에서는 GET_POINTERID_WPARAM 사용하여 WM_POINTERUPDATE 메시지의 wParam 매개 변수에서 포인터 ID를 검색하는 방법을 보여줍니다.

POINTER_INFO pointerInfo;
UINT32       pointerId = GET_POINTERID_WPARAM(wParam);

// Retrieve common pointer information
if (!GetPointerInfo(pointerId, &amp;pointerInfo))
{
    // failure, call GetLastError()
}
else
{
    // success, process pointerInfo
}

다음 코드 예제에서는 다른 포인터 형식을 처리 하는 방법을 보여 있습니다.

POINTER_TOUCH_INFO   touchInfo;
POINTER_PEN_INFO     penInfo;
POINTER_INFO pointerInfo;
UINT32       pointerId = GET_POINTERID_WPARAM(wParam);
POINTER_INPUT_TYPE pointerType = PT_POINTER;

// default to unhandled to enable call to DefWindowProc
fHandled = FALSE;

if (!GetPointerType(pointerId, &pointerType))
{
    // failure, call GetLastError()
    // set PT_POINTER to fall to default case below
    pointerType = PT_POINTER;
}

switch (pointerType)
{
case PT_TOUCH:
    // Retrieve touch information
    if (!GetPointerTouchInfo(pointerId, &touchInfo))
    {
        // failure, call GetLastError()
    }
    else
    {
        // success, process touchInfo
        // mark as handled to skip call to DefWindowProc
        fHandled = TRUE;
    }
    break;
case PT_PEN:
    // Retrieve pen information
    if (!GetPointerPenInfo(pointerId, &penInfo))
    {
        // failure, call GetLastError()
    }
    else
    {
        // success, process penInfo
        // mark as handled to skip call to DefWindowProc
        fHandled = TRUE;
    }
    break;
default:
    if (!GetPointerInfo(pointerId, &pointerInfo)) 
    {
        // failure.
    } 
    else 
    {
        // success, proceed with pointerInfo.
        fHandled = HandleGenericPointerInfo(&pointerInfo);
    }
    break;
}

요구 사항

요구
지원되는 최소 클라이언트
Windows 8 [데스크톱 앱만 해당]
지원되는 최소 서버
Windows Server 2012 [데스크톱 앱만 해당]
머리글
Winuser.h(Windows.h 포함)

참고 항목

메시지

참조

포인터 플래그

GET_POINTERID_WPARAM

IS_POINTER_NEW_WPARAM

IS_POINTER_INRANGE_WPARAM

IS_POINTER_INCONTACT_WPARAM

IS_POINTER_PRIMARY_WPARAM

IS_POINTER_FIRSTBUTTON_WPARAM

IS_POINTER_SECONDBUTTON_WPARAM

IS_POINTER_THIRDBUTTON_WPARAM

IS_POINTER_FOURTHBUTTON_WPARAM

IS_POINTER_FIFTHBUTTON_WPARAM