커서 정보
Windows는 애플리케이션에서 사용할 수 있는 표준 커서 세트를 제공합니다. 다음 커서 식별자는 WinUser.h에 정의되어 있습니다.
값 | 의미 |
---|---|
IDC_ARROW MAKEINTRESOURCE(32512) |
일반 선택 |
IDC_IBEAM MAKEINTRESOURCE(32513) |
텍스트 선택 |
IDC_WAIT MAKEINTRESOURCE(32514) |
바쁨 |
IDC_CROSS MAKEINTRESOURCE(32515) |
정밀 선택 |
IDC_UPARROW MAKEINTRESOURCE(32516) |
대체 선택 |
IDC_SIZENWSE MAKEINTRESOURCE(32642) |
대각선 크기 조정 1 |
IDC_SIZENESW MAKEINTRESOURCE(32643) |
대각선 크기 조정 2 |
IDC_SIZEWE MAKEINTRESOURCE(32644) |
가로 크기 조정 |
IDC_SIZENS MAKEINTRESOURCE(32645) |
세로 크기 조정 |
IDC_SIZEALL MAKEINTRESOURCE(32646) |
이동 |
IDC_NO MAKEINTRESOURCE(32648) |
사용 불가 |
IDC_HAND MAKEINTRESOURCE(32649) |
링크 선택 |
IDC_APPSTARTING MAKEINTRESOURCE(32650) |
백그라운드에서 작업 |
IDC_HELP MAKEINTRESOURCE(32651) |
도움말 선택 |
IDC_PIN MAKEINTRESOURCE(32671) |
위치 선택 |
IDC_PERSON MAKEINTRESOURCE(32672) |
사용자 선택 |
WinUser.h에 정의된 식별자가 없거나 (또는 사용되지 않는 것으로 간주되는) 여러 개의 추가 커서도 사용할 수 있습니다.
값 | 의미 |
---|---|
MAKEINTRESOURCE(32631) | 펜 커서입니다. |
MAKEINTRESOURCE(32652) | 화살표가 북쪽과 남쪽을 가리키는 스크롤 커서입니다. |
MAKEINTRESOURCE(32653) | 화살표가 서쪽과 동쪽을 가리키는 스크롤 커서입니다. |
MAKEINTRESOURCE(32654) | 화살표가 북쪽, 남쪽, 동쪽 및 서쪽을 가리키는 스크롤 커서입니다. |
MAKEINTRESOURCE(32655) | 화살표가 북쪽을 가리키는 스크롤 커서입니다. |
MAKEINTRESOURCE(32656) | 화살표가 남쪽을 가리키는 스크롤 커서입니다. |
MAKEINTRESOURCE(32657) | 화살표가 서쪽을 가리키는 스크롤 커서입니다. |
MAKEINTRESOURCE(32658) | 화살표가 동쪽을 가리키는 스크롤 커서입니다. |
MAKEINTRESOURCE(32659) | 화살표가 북쪽과 서쪽을 가리키는 스크롤 커서입니다. |
MAKEINTRESOURCE(32660) | 화살표가 북쪽과 동쪽을 가리키는 스크롤 커서입니다. |
MAKEINTRESOURCE(32661) | 화살표가 남쪽과 서쪽을 가리키는 스크롤 커서입니다. |
MAKEINTRESOURCE(32662) | 화살표가 남쪽과 동쪽을 가리키는 스크롤 커서입니다. |
MAKEINTRESOURCE(32663) | 화살표 cd 커서입니다. |
표준 커서 사용에 대한 자세한 내용은 지침 섹션을 참조하세요.
각 표준 커서에는 커서와 연관된 해당 기본 이미지가 있습니다. 사용자 또는 애플리케이션은 언제든 표준 커서와 연관된 기본 이미지를 바꿀 수 있습니다. 애플리케이션은 SetSystemCursor 함수를 사용하여 기본 이미지를 대체합니다.
애플리케이션은 GetIconInfo 함수를 사용하여 커서의 현재 이미지를 검색하고 DrawIconEx 함수를 사용하여 커서를 그릴 수 있습니다.
사용자 지정 커서는 특정 애플리케이션에서 사용하도록 설계되었으며 개발자가 정의하는 임의 디자인일 수 있습니다. 다음 그림은 여러 사용자 지정 커서를 보여줍니다.
커서는 흑백 또는 컬러일 수 있으며, 정적이거나 동적일 수 있습니다. 특정 컴퓨터 시스템에서 사용되는 커서 유형은 시스템의 디스플레이에 따라 다릅니다. VGA 같은 구형 디스플레이는 컬러나 애니메이티드 커서를 지원하지 않습니다. 디스플레이 드라이버가 DIB(디바이스 독립적 비트맵) 엔진을 사용하는 신형 디스플레이는 이를 지원합니다.
커서와 아이콘은 유사하며 여러 상황에서 서로 교환하여 사용할 수 있습니다. 둘 사이의 유일한 차이점은 커서로 지정된 이미지는 디스플레이에서 지원될 수 있는 형식이어야 한다는 점입니다. 예를 들어, VGA 디스플레이용 커서는 단색이어야 합니다.
이 개요에서는 다음 항목에 관한 정보를 제공합니다.
핫 스폿
커서에서 핫 스폿 이라는 픽셀은 마우스 버튼 클릭 같은 마우스 이벤트의 영향을 받는 정확한 화면 위치를 표시합니다. 일반적으로 핫 스폿은 커서의 포컬 포인트입니다. 시스템이 추적하고 인식하는 지점이 바로 커서의 위치입니다. 예를 들어, 일반적인 핫 스폿은 화살표 모양 커서의 끝에 있는 픽셀과 십자형 커서의 가운데에 있는 픽셀입니다. 다음 그림은 그리기 프로그램의 커서 두 개를 보여주는데, 이 경우 핫 스폿이 브러시 끝과 페인트의 십자선이 연결되어 있습니다.
마우스 입력 이벤트가 발생하면 마우스 드라이버가 해당 이벤트를 핫 스폿 좌표를 포함하는 적절한 마우스 메시지로 변환합니다. 이 시스템은 핫 스폿이 포함된 창이나 마우스 입력을 캡처하는 창으로 마우스 메시지를 보냅니다. 자세한 내용은 마우스 입력을 참조하세요.
마우스 및 커서
이 시스템은 화면에서 커서를 알맞게 이동하여 마우스의 움직임을 반영합니다. 커서가 창의 다른 부분으로 또는 다른 창으로 이동하면 시스템(또는 애플리케이션)이 커서의 모양을 바꿉니다. 예를 들어, 커서가 하이퍼링크 위에 오면 시스템이 커서를 화살표에서 손으로 변경합니다.
시스템에 마우스가 없는 경우, 사용자가 창 크기를 조정하거나 이동하는 데 사용되는 특정 시스템 명령을 선택할 때만 커서가 시스템에 표시되고 이동합니다. 마우스를 사용할 수 없을 때 커서를 표시하고 이동하는 방법을 사용자에게 제공하기 위해, 애플리케이션에서 커서 함수를 사용하여 마우스 이동을 시뮬레이션할 수 있습니다. 이 시뮬레이션 기능을 고려하여 사용자는 화살표 키를 사용하여 커서를 이동할 수 있습니다.
커서 만들기
표준 커서는 미리 정의되어 있기 때문에 만들 필요가 없습니다. 표준 커서를 사용하기 위해 애플리케이션은 LoadCursor 또는 LoadImage 함수를 사용하여 커서 핸들을 검색합니다. 이 커서 핸들 이란 표준 또는 사용자 지정 커서를 식별하는 HCURSOR 형식의 고유 값입니다.
애플리케이션용 사용자 지정 커서를 만들려면 일반적으로 그래픽 애플리케이션을 사용하며 애플리케이션의 리소스 정의 파일에 커서를 리소스로 포함합니다. 런타임에서 LoadCursor 를 호출하여 커서 핸들을 검색합니다. 커서 리소스에는 다양한 디스플레이 디바이스에 대한 데이터가 포함되어 있습니다. 이 LoadCursor 함수는 현재 디스플레이 디바이스에 가장 적합한 데이터를 자동으로 선택합니다. .CUR 또는 .ANI 파일에서 직접 커서를 로드하려면 LoadCursorFromFile 함수를 사용합니다.
사용자 지정 커서를 만들려면 CreateIconIndirect 함수를 사용하면 되는데, 이 함수는 ICONINFO 구조체의 콘텐츠를 기반으로 커서를 만듭니다. 이 GetIconInfo 함수는 이 구조를 핫 스폿 좌표 및 연결된 마스크와 색상에 관한 정보로 채웁니다.
런타임에 커서를 만드는 대신, 애플리케이션은 사용자 지정 커서를 리소스로 구현하고 LoadCursor, LoadCursorFromFile, 또는 LoadImage 를 사용합니다. 커서 리소스를 사용하면 디바이스 의존성이 방지되고, 지역화가 간소화되며, 애플리케이션에 커서 디자인을 공유할 수 있습니다.
이 CreateIconFromResourceEx 함수를 사용하면 애플리케이션에서 리소스 데이터를 기반으로 아이콘 및 커서를 만들 수 있습니다. CreateIconFromResourceEx 는 다른 실행(.exe) 파일 또는 DLL의 이진 리소스 데이터를 기반으로 커서를 만듭니다. 이에 앞서 LookupIconIdFromDirectoryEx 함수 및 여러 리소스 함수에 대한 호출이 선행되어야 합니다. LookupIconIdFromDirectoryEx 는 현재 디스플레이 디바이스에 가장 적합한 커서 데이터를 식별합니다. 리소스 함수에 대한 자세한 내용은 리소스를 참조하세요.
커서 위치 및 모양
시스템에서 마우스용 커서를 자동으로 표시하고 화면에서 위치를 업데이트합니다. 각각 GetCursorPos 및 SetCursorPos 함수를 사용하여 커서의 현재 화면 좌표를 가져오고 화면의 임의 위치로 커서를 이동할 수 있습니다.
또한 GetCursor 함수를 사용하여 현재 커서에 대한 핸들을 검색할 수도 있고 SetCursor 함수를 사용하여 커서를 설정할 수도 있습니다. 이 SetCursor를 호출한 후에는 마우스가 움직이거나 커서가 명시적으로 다른 커서로 설정되거나 시스템 명령이 실행될 때까지 커서 모양이 변경되지 않습니다.
사용자가 마우스를 움직이면 시스템이 새 위치에서 커서를 다시 그립니다. 시스템은 커서가 가리키는 창과 연결된 커서 디자인을 자동으로 다시 그립니다.
커서 디자인을 변경하지 않고도 ShowCursor 함수를 사용하여 커서를 숨기고 다시 표시할 수 있습니다. 이 함수는 내부 카운터를 사용하여 커서를 숨기거나 표시할 시점을 결정합니다. 커서를 표시하려고 하면 카운터가 증가하고 커서를 숨기려고 하면 카운터가 감소합니다. 카운터가 0 이상인 경우에만 커서가 표시됩니다.
전역 커서에 대한 다음 정보를 GetCursorInfo 함수가 가져옵니다. 해당 정보로는 커서가 숨겨지거나 표시되는지 여부, 커서에 대한 핸들 및 커서의 좌표입니다.
커서 제한
커서를 화면의 사각형 영역으로 제한하려면 ClipCursor 함수를 사용하면 됩니다. 사용자가 사각형의 제한된 영역 내 특정 이벤트에 응답해야 하는 경우에 유용합니다. 예를 들어, ClipCursor 를 사용하여 커서를 모달 대화 상자로 제한하여 대화 상자가 닫힐 때까지 사용자가 다른 창과 상호 작용하지 못하게 할 수 있습니다.
일시적으로 제한된 사각형 영역의 화면 좌표를 GetClipCursor 함수가 검색합니다. 커서를 제한해야 하는 경우에, 이 함수를 사용하여 커서가 이동할 수 있는 원래 영역의 좌표를 저장할 수도 있습니다. 이후에 더 이상 추가로 감금할 필요가 없는 경우, 커서를 원래 영역으로 복원할 수 있습니다.
커서 제거
커서 핸들을 제거하고사용된 커서의 메모리를 해제하려면 DestroyCursor 함수를 호출하면 됩니다. 그러나 이 함수는 공유 커서에는 영향을 주지 않습니다. 공유 커서는 커서를 로드한 모듈이 메모리에 유지되는 동안만 유효합니다. 다음 함수들이 공유 커서를 가져옵니다.
- LoadCursor
- LoadCursorFromFile
- LoadImage (만약 LR_SHARED 플래그를 사용하는 경우)
- CopyImage (만약 LR_COPYRETURNORG 플래그를 사용하고 hImage 가 공유 커서인 경우)
더 이상 CreateIconIndirect 함수를 사용하여 만든 커서가 필요하지 않으면 커서를 제거해야 합니다. 이 DestroyIcon 함수는 커서 핸들을 제거하고 커서가 사용한 메모리를 해제합니다. 이 함수를 CreateIconIndirect를 사용하여 만든 커서에서만 사용합니다.
커서 복제
이 CopyCursor 함수는 커서 핸들을 복사합니다. 이렇게 하면 애플리케이션 또는 DLL 코드가 다른 모듈이 소유한 커서에 대한 핸들을 검색할 수 있습니다. 이후 다른 모듈이 해제된 경우에도, 커서를 복사한 모듈은 커서 디자인을 계속 사용할 수 있습니다.
실행 파일에서 커서 리소스를 추가하거나, 제거하거나, 바꾸는 방법에 대한 자세한 내용은 리소스를 참조하세요.
Window 클래스 커서
창 클래스를 등록할 때 RegisterClass 함수를 사용하여 클래스 커서라고 하는 기본 커서를 할당할 수 있습니다. 애플리케이션이 창 클래스를 등록한 후, 해당 클래스의 각 창에는 지정된 클래스 커서가 있습니다.
클래스 커서를 재정의하려면 WM_SETCURSOR 메시지를 처리합니다. 또한 SetClassLong 함수를 사용하여 클래스 커서를 바꿀 수도 있습니다. 이 함수는 지정된 클래스의 모든 창에 대한 기본 창 설정을 변경합니다. 자세한 내용은 클래스 커서를 참조하세요.