커서 이미지 설정

‘커서’는 마우스 또는 다른 포인팅 디바이스의 위치를 보여 주는 작은 이미지입니다. 많은 애플리케이션이 커서 이미지를 변경하여 사용자에게 피드백을 제공합니다. 필수는 아니지만 애플리케이션을 좀 더 멋지게 꾸밀 수 있습니다.

Windows는 ‘시스템 커서’라는 표준 커서 이미지 집합을 제공합니다. 여기에는 화살표, 손, I-빔, 모래 시계(지금은 회전하는 원) 등이 포함됩니다. 이 섹션에서는 시스템 커서를 사용하는 방법을 설명합니다. 사용자 지정 커서 만들기와 같은 고급 작업에 대해서는 커서를 참조하세요.

WNDCLASS 또는 WNDCLASSEX 구조체의 hCursor 멤버를 설정하여 커서를 창 클래스와 연결할 수 있습니다. 그렇지 않으면 기본 커서가 화살표입니다. 마우스를 창 위로 가져가면 다른 창에서 마우스를 캡처하지만 않으면 창에 WM_SETCURSOR 메시지가 표시됩니다. 이때 다음 이벤트 중 하나가 발생합니다.

  • 애플리케이션은 커서를 설정하고 창 프로시저는 TRUE를 반환합니다.
  • 애플리케이션은 아무 것도 수행하지 않으며 WM_SETCURSORDefWindowProc에 전달합니다.

커서를 설정하기 위해 프로그램은 다음을 수행합니다.

  1. LoadCursor를 호출하여 커서를 메모리에 로드합니다. 이 함수는 커서에 대한 핸들을 반환합니다.
  2. SetCursor를 호출하고 커서 핸들을 전달합니다.

그렇지 않고 애플리케이션이 WM_SETCURSORDefWindowProc에 전달하는 경우 DefWindowProc 함수는 다음 알고리즘을 사용하여 커서 이미지를 설정합니다.

  1. 창에 부모가 있는 경우 WM_SETCURSOR 메시지를 처리할 부모로 전달합니다.
  2. 그렇지 않고 창에 클래스 커서가 있는 경우 커서를 클래스 커서로 설정합니다.
  3. 클래스 커서가 없으면 커서를 화살표 커서로 설정합니다.

LoadCursor 함수는 리소스에서 사용자 지정 커서 또는 시스템 커서 중 하나를 로드할 수 있습니다. 다음 예제에서는 커서를 미리 정의된 시스템 링크 선택 커서로 설정하는 방법을 보여 줍니다.

    LPCTSTR cursor = IDC_HAND;
    hCursor = LoadCursor(NULL, cursor);
    SetCursor(hCursor);

커서를 변경하면 WM_SETCURSOR 메시지를 가로채 커서를 다시 설정하지 않으면 커서 이미지가 다음 마우스 이동 시 다시 설정됩니다. 다음 코드에서는 WM_SETCURSOR를 처리하는 방법을 보여 줍니다.

    case WM_SETCURSOR:
        if (LOWORD(lParam) == HTCLIENT)
        {
            SetCursor(hCursor);
            return TRUE;
        }
        break;

이 코드는 먼저 lParam의 하위 16비트를 확인합니다. LOWORD(lParam)HTCLIENT와 같으면 커서가 창의 클라이언트 영역 위에 있다는 의미입니다. 그렇지 않으면 커서가 비클라이언트 영역 위에 있는 것입니다. 일반적으로 클라이언트 영역에 대한 커서만 설정하고, 비클라이언트 영역에 대한 커서는 Windows에서 자동으로 설정되도록 합니다.

다음

사용자 입력: 확장 예제