Pregunta

Tengo un cuadro de diálogo que permite a los usuarios configurar teclas de acceso rápido para su uso en un programa 3D en Windows. Estoy usando CHotKeyCtrl, que es bastante bueno, pero no maneja algunas teclas que a los usuarios les gustaría usar, específicamente, la pestaña y el espacio.

El manejo de las teclas de acceso rápido es lo suficientemente inteligente como para poder disparar esas teclas, solo necesito una IU para que se configuren. Un control similar a CHotKeyCtrl sería ideal, pero también se aprecian otras soluciones.

¿Fue útil?

Solución

Una opción alternativa sería utilizar un control de edición estándar estándar con una función de enlace de mensaje.

Esto le permitiría interceptar los mensajes del teclado WM_KEYDOWN enviados a ese control de edición.

La función de enlace se vería así:

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

El enlace se puede adjuntar al control de edición cuando el control de edición se enfoca de la siguiente manera:

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

y se elimina cuando el control de edición cuando pierde se enfoca de la siguiente manera:

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

Usando este enfoque, cada pulsación de tecla se enviará al gancho, siempre que el control de edición esté enfocado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top