탭과 공간과 같은 핫키를 얻기위한 제어
-
03-07-2019 - |
문제
사용자가 Windows에서 3D 프로그램에서 사용할 핫키를 설정할 수있는 대화 상자가 있습니다. ChotkeyCtrl을 사용하고 있는데, 이는 꽤 좋지만 사용자가 사용하려는 키, 특히 탭 및 공간을 처리하지는 않습니다.
핫키 핸들링은 해당 키를 발사 할 수있을 정도로 똑똑합니다. UI가 설정되도록 UI 만 있으면됩니다. ChotkeyCtrl과 유사한 컨트롤이 이상적이지만 다른 해결 방법도 높이 평가됩니다.
해결책
하나의 해결 방법 옵션은 메시지 후크 함수와 함께 스톡 표준 편집 컨트롤을 사용하는 것입니다.
이렇게하면 키보드를 가두 게 할 수 있습니다 wm_keydown 해당 편집 컨트롤로 전송 된 메시지.
후크 함수는 다음과 같습니다.
LRESULT CALLBACK MessageHook(int code, WPARAM wParam, LPMSG lpMsg)
{
LRESULT lResult = 0;
if ((code >= 0) && (code == MSGF_DIALOGBOX))
{
if (lpMsg->message == WM_KEYDOWN)
{
//-- process the key down message
lResult = 1;
}
}
// do default processing if required
if (lResult == 0)
{
lResult = CallNextHookEx(MessageFilterHook, code, wParam, (LPARAM)lpMsg);
}
return lResult;
}
그런 다음 편집 컨트롤이 다음과 같이 초점을 맞출 때 후크를 편집 컨트롤에 부착 할 수 있습니다.
//-- create an instance thunk for our hook callback
FARPROC FilterProc = (FARPROC) MakeProcInstance((HOOKPROC)(MessageHook),
hInstance);
//-- attach the message hook
FilterHook = SetWindowsHookEx(WH_MSGFILTER,
(HOOKPROC)FilterProc,
hInstance, GetCurrentThreadId());
다음과 같이 초점을 풀면 편집 컨트롤이 제거 될 때 제거됩니다.
//-- remove a message hook
UnhookWindowsHookEx(MessageFilterHook);
이 접근법을 사용하면 편집 컨트롤이 초점을 맞추면 모든 키 프레스가 후크로 전송됩니다.
제휴하지 않습니다 StackOverflow