Frage

Ich habe ein Dialogfeld, das Benutzer Hotkeys für die Verwendung in einem 3D-Programm auf Windows festlegen kann. Ich verwende CHotKeyCtrl, was ziemlich gut ist, aber nicht verarbeitet einige Tasten, die die Benutzer verwenden mögen -. Insbesondere Reiter und Raum

Die Hotkey Handhabung intelligent genug, um in der Lage sein, auf diesen Tasten zu schießen, ich brauche nur ein UI sie lasse eingestellt werden. Eine ähnliche Kontrolle CHotKeyCtrl wäre ideal, aber auch andere Abhilfen sind auch sehr geschätzt.

War es hilfreich?

Lösung

Eine Umgehung Option ein Aktie Bearbeitungssteuerstandardelement mit einer Nachricht Hook-Funktion zu verwenden wäre.

Dies würde zu stoppen lassen die Tastatur WM_KEYDOWN Nachrichten an diese bearbeiten Steuerung gesendet.

Die Hook-Funktion wie folgt aussehen würde:

    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;
    }

Der Haken kann dann angebracht seiner Kontrolle zu bearbeiten, wenn die Bearbeitungssteuer konzentrieren wird, wie folgt:

    //-- 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());

und entfernt, wenn die Bearbeitungssteuer wenn Lose Fokus wie folgt:

    //-- remove a message hook
    UnhookWindowsHookEx(MessageFilterHook);

Mit diesem Ansatz Jeden Tastendruck wird an den Haken gesendet werden, vorausgesetzt, die Edit-Control Fokus hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top