문제

사용자가 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);

이 접근법을 사용하면 편집 컨트롤이 초점을 맞추면 모든 키 프레스가 후크로 전송됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top