DG_MSG_HOTKEY
등록된 핫키가 눌렸습니다.
메시지 파라미터
- dialId
- 다이얼로그의 ID입니다.
- item
- 사용하지 않습니다. 항상 0입니다.
- msgData
- DGRegisterHotKey 함수가 리턴하는 핫키 식별자입니다.
리턴 값
-
값 의미 0 핫키가 처리되지 않습니다. 키보드 이벤트 처리가 진행 중입니다. 1 핫키가 처리되고 키보드 이벤트의 추가 처리가 생략됩니다.
설명
핫키는 다이얼로그에 대하여 DG_MSG_HOTKEY 메시지를 생성하는 키 스트로크 또는 키 스트로크의 조합입니다. DG에서 핫키는 메뉴 가속기 및 운영체제 단축키와 비슷합니다. 이것들은 자주 사용하는 커맨드에 대하여 메뉴와 툴바에서 하는 것보다 더 빠르고 더욱 직접적인 접근을 제공해줍니다. 게다가 이것들은 다른 특수 기능들도 몇 가지 갖고 있습니다.
핫키들은 DGRegisterHotKey 함수를 호출하여 어떤 타입의 다이얼로그에도 등록할 수 있습니다. 만약 핫키가 성공적으로 등록되면, 나중에 DGRegisterHotKey가 리턴하는 short 식별자에 의해 참조되어야 합니다. 핫키로 등록할 수 없는 키 조합들이 몇 가지 있습니다. (DGRegisterHotKey 함수, 운영체제 단축키 및 다이얼로그 키보드 인터페이스 페이지의 설명을 보십시오) 또한 핫키는 1개 이상의 다이얼로그에게 등록될 수 있음을 참고하십시오. 예전에 다이얼로그에 등록된 핫키를 등록 해제하려면 DGUnregisterHotKey를 사용하십시오.
핫키들은 활성화되거나 비활성화될 수 있습니다. 핫키가 등록되면 자동으로 활성화됩니다. 한 다이얼로그에 속하는 모든 핫키들의 상태는 DGDisableHotKeys 함수를 호출하여 비활성화할 수 있습니다. 이 핫키들을 다시 활성화하려면 DGEnableHotKeys를 사용하십시오.
만약 한 Modal 다이얼로그가 열리면, (존재할 경우) 그 다이얼로그의 핫키들만 활성화되고 다른 다이얼로그들은 DG_MSG_HOTKEY 메시지를 받을 수 없습니다.
Palette 및 Modeless 다이얼로그들의 경우, 상황은 좀 더 복잡합니다. Palette 및 Modeless 다이얼로그만 열려 있고 사용자가 핫키를 눌렀다고 가정해 봅시다. 애플리케이션의 메시지 루프 안에서 플랫폼 지정 키보드 이벤트는 DGModelessHandler 함수에게 전달되어야 합니다. 이 메시지를 처리하는 동안, DG는 먼저 활성 다이얼로그에게 속한 핫키인지 테스트합니다. (한 다이얼로그가 활성화되어 있고 그 중 한 항목이 키보드 포커스를 갖고 있거나, Palette 및 Modeless 다이얼로그의 큐의 꼭대기에 있음) 만약 그러하다면, DG는 활성 다이얼로그에게 DG_MSG_HOTKEY 메시지를 보냅니다. 만약 핫키 메시지가 애플리케이션에 의해 처리되면 (즉 콜백 함수가 1을 리턴함) 메시지의 처리는 종료되고 DGModelessHandler가 리턴합니다. 그렇지 않으면, DG는 다이얼로그의 큐에서 열린 모든 Palette들을 순서대로 비슷하게 테스트합니다. 만약 어떤 Palette 다이얼로그도 핫키 메시지를 처리할 수 없으면, DG는 결국 최상위 Modeless 다이얼로그를 테스트합니다. (만약 있다면)
애플리케이션이 1개 이상의 메뉴 가속기를 핫키로 등록할 수 있다는 것도 참고하십시오. 만약 사용자가 이 타입의 키 또는 키 조합을 누르면, 애플리케이션은 먼저 메뉴 가속기로 간주해야 합니다. 만약 해당하는 메뉴 또는 메뉴 항목이 활성화되지 않았으면, 메시지는 그것을 핫키로 처리하는 DGModelessHandler에게 전달해야 합니다.
다이얼로그 콜백 함수에서 DG_MSG_HOTKEY 메시지를 처리할 때, 애플리케이션은 아무 적절한 작업들을 수행할 수 있습니다. 그리고 나서 0 또는 1을 리턴할 수 있습니다. 리턴 값 1은 핫키 메시지가 처리되고 키보드 이벤트의 추가 처리가 생략되어야 함을 의미합니다. 그러나 만약 애플리케이션이 0을 리턴하면, 키 이벤트의 처리가 계속되고 다른 다이얼로그들은 동일한 DG_MSG_HOTKEY 메시지를 받을 수 있습니다.
핫키는 컨텍스트를 인식하는데 이것은 가장 중요한 특징일 수 있습니다. 컨텍스트 민감도는 다음과 같이 설명할 수 있습니다: 단순한 'a' 키가 다이얼로그에 핫키로 등록되어 있고, 그 다이얼로그가 텍스트-타입 Edit 컨트롤을 갖고 있으며 그 컨트롤이 현재 키보드 포커스를 갖고 있다고 가정합시다. 사용자가 'a' 키를 누를 때, 키보드 이벤트를 핫키로 간주하지 않고 그 대신에 Edit 컨트롤에 'a' 문자가 입력됩니다. 물론, 만약 동일한 상황에서 숫자-타입 Edit 컨트롤이 키보드 포커스를 갖고 있었다면, 'a' 키는 Edit 컨트롤에 의해 "필터링"되지 않고 핫키로 작동할 것입니다.
위의 자동 핫키 필터링은 다음 알고리즘에 의해 DG에서 구현됩니다: 포커스 가능한 다이얼로그 항목이 키보드 포커스를 얻게 되면, 그 항목이 포커스를 갖고 있는 동안 일반 키 스트로크로 받아들일 수 있도록 모든 핫키들이 일시적으로 비활성화됩니다. 다음 표는 포커스 가능한 항목이 키보드 포커스를 가질 때까지 어떤 핫키들이 일시적으로 비활성화되는지 요약한 것입니다. 이 표는 기본적으로 양 (Macintosh 및 Windows) 플랫폼의 다이얼로그 항목 키보드 인터페이스를 기반하고 있습니다.
-
항목 타입 키 Modifier 리스트 박스
리스트 뷰
트리 뷰DG_KEY_LEFT
DG_KEY_RIGHT
DG_KEY_UP
DG_KEY_DOWN
DG_KEY_HOME
DG_KEY_END
DG_KEY_PAGEUP
DG_KEY_PAGEDOWN없음 또는 DG_MOD_SHIFT 유효한 모든 텍스트 키 없음 날짜 & 시간 컨트롤 DG_KEY_LEFT
DG_KEY_RIGHT
DG_KEY_UP
DG_KEY_DOWN
DG_KEY_HOME
DG_KEY_END
'-', '+', '0'..'9'없음 Edit 컨트롤
Rich Edit 컨트롤DG_KEY_BACK
DG_KEY_LEFT
DG_KEY_RIGHT
DG_KEY_DELETE
DG_KEY_HOME
DG_KEY_END
유효한 모든 숫자 또는 텍스트 키없음 DG_KEY_LEFT
DG_KEY_RIGHT
'x', 'X', 'c', 'C', 'v', 'V'DG_MOD_COMMAND DG_KEY_LEFT
DG_KEY_RIGHT
DG_KEY_DELETE
DG_KEY_HOME
DG_KEY_ENDDG_MOD_SHIFT DG_KEY_LEFT
DG_KEY_RIGHTDG_MOD_COMMAND | DG_MOD_SHIFT 텍스트-타입 Edit 컨트롤 모든 키 DG_MOD_OPTION 멀티-라인 Edit 컨트롤
Rich Edit 컨트롤DG_KEY_ENTER
DG_KEY_RETURN
DG_KEY_UP
DG_KEY_DOWN
DG_KEY_PAGEUP
DG_KEY_PAGEDOWN없음 DG_KEY_HOME
DG_KEY_ENDDG_MOD_COMMAND or
DG_MOD_COMMAND | DG_MOD_SHIFTDG_KEY_UP
DG_KEY_DOWN
DG_KEY_PAGEUP
DG_KEY_PAGEDOWNDG_MOD_SHIFT Rich Edit 컨트롤 DG_KEY_TAB 없음 또는 DG_MOD_SHIFT
위 표에서 "유효한 모든 숫자 또는 텍스트 키" 문구는 Edit 컨트롤의 자동 타입-인식 문자 필터링을 통해 통과할 수 있는 문자들을 참고합니다. (자세한 것은 Edit 컨트롤을 보십시오)
요구사항
- 버전: DG 1.0.0 또는 이후
- 헤더: DG.h
참고사항
DG 메시지, Modal 다이얼로그, Modeless 다이얼로그, Palette 다이얼로그, 날짜 & 시간 컨트롤, Edit 컨트롤, 리스트 박스, 리스트 뷰, Rich Edit 컨트롤, 트리 뷰
콜백 함수, DGDisableHotKeys, DGEnableHotKeys, DGModelessHandler, DGRegisterHotKey, DGUnregisterHotKey
다이얼로그 키보드 인터페이스, 다이얼로그 항목 키보드 인터페이스, 운영체제 단축키