핫 키 컨트롤은 사용자가 핫 키로 사용할 키 입력 조합을 입력할 수 있는 창입니다. 핫 키는 사용자가 빠르게 작업을 수행하기 위해 누를 수 있는 키 조합입니다. 예를 들어 사용자는 지정된 창을 활성화하고 z 순서의 맨 위로 가져오는 핫 키를 만들 수 있습니다. 핫 키 컨트롤은 사용자의 선택 항목을 표시하고 사용자가 유효한 키 조합을 선택하도록 합니다. 다음 스크린샷에서는 사용자가 Alt 키를 누른 후 대화 상자에 핫 키 컨트롤이 표시되는 방법을 보여 줍니다.
핫 키 컨트롤스크린샷
핫 키 컨트롤 사용
사용자가 핫 키로 사용할 키 조합을 입력하면 키의 이름이 핫 키 컨트롤에 표시됩니다. 키 조합은 한정자 키(예: Ctrl, Alt 또는 Shift)와 함께 제공되는 키(예: 문자 키, 화살표 키, 함수 키 등)로 구성됩니다.
사용자가 키 조합을 선택한 후 애플리케이션은 핫 키 컨트롤에서 키 조합을 검색하고 이를 사용하여 시스템에서 핫 키를 설정합니다. 핫 키 컨트롤에서 검색된 정보에는 보조 키와 함께 제공되는 키의 가상 키 코드를 나타내는 플래그가 포함됩니다.
애플리케이션은 핫 키 컨트롤에서 제공하는 정보를 사용하여 전역 핫 키 또는 스레드별 핫 키를 설정할 수 있습니다. 전역 핫 키는 특정 창과 연결됩니다. 사용자가 시스템의 모든 부분에서 창을 활성화할 수 있습니다. 애플리케이션은 WM_SETHOTKEY 메시지를 사용하여 전역 핫 키를 설정합니다. 사용자가 전역 핫 키를 누를 때마다 WM_SETHOTKEY 지정된 창은 SC_HOTKEY 값을 지정하는 WM_SYSCOMMAND 메시지를 받습니다. 이 메시지는 수신하는 창을 활성화합니다. 핫 키는 WM_SETHOTKEY 호출한 애플리케이션이 종료될 때까지 유효합니다.
스레드별 핫 키는 메시지 루프의 다음 반복에 의해 제거되도록 특정 스레드의 시작 부분에 게시되는 WM_HOTKEY 메시지를 생성합니다. 애플리케이션은 RegisterHotKey 함수를 사용하여 스레드별 핫 키를 설정합니다.
핫 키 제어 메시지
핫 키 컨트롤을 만든 후 애플리케이션은 HKM_SETRULES, HKM_SETHOTKEY및 HKM_GETHOTKEY세 가지 메시지를 사용하여 상호 작용합니다.
애플리케이션은 HKM_SETRULES 메시지를 보내 잘못된 핫 키로 간주되는 CTRL, Alt 및 Shift 키 조합 집합을 지정할 수 있습니다. 애플리케이션에서 잘못된 키 조합을 지정하는 경우 사용자가 잘못된 조합을 선택할 때 사용할 기본 한정자 조합도 지정해야 합니다. 사용자가 잘못된 조합을 입력하면 시스템은 잘못된 조합과 기본 조합에 대해 논리적 OR 연산을 수행합니다. 결과는 유효한 조합으로 간주됩니다. 문자열로 변환되고 컨트롤에 표시됩니다.
HKM_SETHOTKEY 메시지를 사용하면 애플리케이션이 핫 키 컨트롤에 대한 핫 키 조합을 설정할 수 있습니다. 이 메시지는 일반적으로 핫 키 컨트롤을 만들 때도 사용됩니다.
애플리케이션은 HKM_GETHOTKEY 메시지를 사용하여 사용자가 선택한 핫 키의 가상 키 코드 및 한정자 플래그를 검색합니다.
핫 키 컨트롤 알림
핫 키 컨트롤은 WM_NOTIFY 메시지를 통해 알림 코드를 보내지 않습니다. 그러나 사용자가 컨트롤의 내용을 변경할 때 WM_COMMAND 메시지를 통해 EN_CHANGE 알림을 보냅니다.
기본 핫 키 메시지 처리
이 섹션에서는 핫 키 컨트롤과 함께 사용되는 미리 정의된 HOTKEY_CLASS 창 클래스의 창 프로시저에서 처리하는 창 메시지에 대해 설명합니다.
| 메시지 | 처리 수행됨 |
|---|---|
| WM_CHAR | 가상 키 코드를 검색합니다. |
| WM_CREATE | 핫 키 컨트롤을 초기화하고, 모든 핫 키 규칙을 지우고, 시스템 글꼴을 사용합니다. |
| WM_ERASEBKGND | 캐리트를 숨기고, DefWindowProc 함수를 호출하고, 캐리트를 다시 표시합니다. |
| WM_GETDLGCODE | DLGC_WANTCHARS 값과 DLGC_WANTARROWS 값의 조합을 반환합니다. |
| WM_GETFONT | 글꼴을 검색합니다. |
| WM_KEYDOWN | 키가 ENTER, TAB, 스페이스바, DEL, ESC 또는 백스페이스인 경우 DefWindowProc 함수를 호출합니다. 키가 Shift, Ctrl 또는 Alt인 경우 조합이 유효한지 확인하고, 유효한 경우 조합을 사용하여 핫 키를 설정합니다. 다른 모든 키는 유효성을 먼저 검사하지 않고 핫 키로 설정됩니다. |
| WM_KEYUP | 가상 키 코드를 검색합니다. |
| WM_KILLFOCUS | 캐리트를 파괴합니다. |
| WM_LBUTTONDOWN | 포커스를 창으로 설정합니다. |
| WM_NCCREATE | WS_EX_CLIENTEDGE 창 스타일을 설정합니다. |
| WM_PAINT | 핫 키 컨트롤을 그립니다. |
| WM_SETFOCUS | 캐리트를 만들고 표시합니다. |
| WM_SETFONT | 글꼴을 설정합니다. |
| WM_SYSCHAR | 가상 키 코드를 검색합니다. |
| WM_SYSKEYDOWN | 키가 ENTER, TAB, 스페이스바, DEL, ESC 또는 백스페이스인 경우 DefWindowProc 함수를 호출합니다. 키가 Shift, Ctrl 또는 Alt인 경우 조합이 유효한지 확인하고, 유효한 경우 조합을 사용하여 핫 키를 설정합니다. 다른 모든 키는 유효성을 먼저 검사하지 않고 핫 키로 설정됩니다. |
| WM_SYSKEYUP | 가상 키 코드를 검색합니다. |