Sobre controles de tecla de atalho
Um controle de tecla de atalho é uma janela que permite ao usuário inserir uma combinação de pressionamentos de teclas a serem usados como uma tecla de atalho. Uma tecla de atalho é uma combinação de teclas que o usuário pode pressionar para executar uma ação rapidamente. Por exemplo, um usuário pode criar uma tecla de atalho que ativa uma determinada janela e a leva para o topo da ordem z. O controle de tecla de atalho exibe as opções do usuário e garante que o usuário selecione uma combinação de teclas válida. A captura de tela a seguir mostra como um controle de tecla de atalho aparece em uma caixa de diálogo depois que o usuário pressiona a tecla Alt.
Como usar controles de tecla de atalho
Quando o usuário insere uma combinação de teclas a ser usada como uma tecla de atalho, os nomes das teclas aparecem no controle de tecla de atalho. Uma combinação de teclas pode consistir em uma tecla modificadora (como CTRL, ALT ou SHIFT) e uma tecla que a acompanha (como uma tecla de caractere, uma tecla de seta, uma tecla de função e assim por diante).
Depois que o usuário tiver escolhido uma combinação de teclas, o aplicativo recupera a combinação de teclas do controle de teclas de atalho e a usa para configurar uma tecla de atalho no sistema. As informações recuperadas do controle de tecla de atalho incluem um sinalizador indicando a chave modificadora e o código de chave virtual da chave que o acompanha.
O aplicativo pode usar as informações fornecidas por um controle de tecla de atalho para configurar uma tecla de atalho global ou uma tecla de atalho específica de thread. Uma tecla de atalho global está associada a uma janela específica; Ele permite que o usuário ative a janela de qualquer parte do sistema. Um aplicativo define uma tecla de atalho global usando a mensagem WM_SETHOTKEY. Sempre que o usuário pressiona uma tecla de atalho global, a janela especificada em WM_SETHOTKEY recebe uma mensagem de WM_SYSCOMMAND que especifica o valor SC_HOTKEY. Essa mensagem ativa a janela que a recebe. A tecla de atalho permanece válida até que o aplicativo que chamou WM_SETHOTKEY saia.
Uma tecla de atalho específica do thread gera uma mensagem de WM_HOTKEY que é postada no início de um thread específico para que ela seja removida pela próxima iteração do loop de mensagem. Um aplicativo define uma tecla de atalho específica do thread usando a função RegisterHotKey.
Mensagens de controle de tecla de atalho
Depois de criar um controle de tecla de atalho, um aplicativo interage com ele usando três mensagens: HKM_SETRULES, HKM_SETHOTKEY e HKM_GETHOTKEY.
Um aplicativo pode enviar a mensagem HKM_SETRULES para especificar um conjunto de combinações de teclas CTRL, ALT e SHIFT que são consideradas teclas de atalho inválidas. Se o aplicativo especificar uma combinação de teclas inválida, ele também deverá especificar uma combinação modificadora padrão a ser usada quando o usuário selecionar a combinação inválida. Quando o usuário insere a combinação inválida, o sistema executa uma operação lógica OR na combinação inválida e na combinação padrão. O resultado é considerado uma combinação válida; ele é convertido em uma cadeia de caracteres e exibido no controle.
A mensagem HKM_SETHOTKEY permite que um aplicativo defina a combinação de teclas de atalho para um controle de tecla de atalho. Essa mensagem também é normalmente usada quando o controle de tecla de atalho é criado.
Os aplicativos usam a mensagem HKM_GETHOTKEY para recuperar o código de chave virtual e sinalizadores modificadores da tecla de atalho escolhida pelo usuário.
Notificações de controle de tecla de atalho
O controle de tecla de atalho não envia nenhum código de notificação por meio da mensagem WM_NOTIFY. No entanto, ele enviará a notificação de EN_CHANGE por meio da mensagem WM_COMMAND quando o usuário alterar o conteúdo do controle.
Processamento de mensagens de tecla de atalho padrão
Esta seção descreve as mensagens de janela manipuladas pelo procedimento de janela para a classe de janela HOTKEY_CLASS predefinida usada com controles de tecla de atalho.
Mensagem | Processamento realizado |
---|---|
WM_CHAR | Recupera o código da chave virtual. |
WM_CREATE | Inicializa o controle de tecla de atalho, limpa quaisquer regras de tecla de atalho e usa a fonte do sistema. |
WM_ERASEBKGND | Oculta o acento circunflexo, chama a função DefWindowProc e mostra o cursor novamente. |
WM_GETDLGCODE | Retorna uma combinação dos valores DLGC_WANTCHARS e DLGC_WANTARROWS. |
WM_GETFONT | Recupera a fonte. |
WM_KEYDOWN | Chama a função DefWindowProc se a tecla for ENTER, TAB, SPACE BAR, DEL, ESC ou BACKSPACE. Se a tecla for SHIFT, CTRL ou ALT, ela verificará se a combinação é válida e, se for, definirá a tecla de atalho usando a combinação. Todas as outras chaves são definidas como teclas de atalho sem que sua validade seja verificada primeiro. |
WM_KEYUP | Recupera o código da chave virtual. |
WM_KILLFOCUS | Destrói o acento circunflexo. |
WM_LBUTTONDOWN | Define o foco para a janela. |
WM_NCCREATE | Define o estilo da WS_EX_CLIENTEDGE janela. |
WM_PAINT | Pinta o controle de tecla de atalho. |
WM_SETFOCUS | Cria e mostra o acento circunflexo. |
WM_SETFONT | Define a fonte. |
WM_SYSCHAR | Recupera o código da chave virtual. |
WM_SYSKEYDOWN | Chama a função DefWindowProc se a tecla for ENTER, TAB, SPACE BAR, DEL, ESC ou BACKSPACE. Se a tecla for SHIFT, CTRL ou ALT, ela verificará se a combinação é válida e, se for, definirá a tecla de atalho usando a combinação. Todas as outras chaves são definidas como teclas de atalho sem que sua validade seja verificada primeiro. |
WM_SYSKEYUP | Recupera o código da chave virtual. |