Partilhar via


Personalização de teclado e mouse

O MFC permite que o usuário do aplicativo personalize como ele manipula a entrada de teclado e mouse. O usuário pode personalizar a entrada do teclado atribuindo atalhos de teclado a comandos. O usuário também pode personalizar a entrada do mouse selecionando o comando que deve ser executado quando o usuário clica duas vezes dentro de janelas específicas do aplicativo. Esse tópico explica como personalizar a entrada do seu aplicativo.

Na caixa de diálogo Personalização, o usuário pode alterar os controles personalizados para o mouse e o teclado. Para exibir essa caixa de diálogo, o usuário aponta para Personalizar no menu Exibir e, em seguida, clica em Barras de Ferramentas e Encaixe. Na caixa de diálogo, o usuário clica na guia Teclado ou na guia Mouse.

Personalização do teclado

A ilustração a seguir mostra a guia Teclado da caixa de diálogo Personalização.

Keyboard tab in the Customize dialog box.
Personalização da guia Teclado

O usuário interage com a guia teclado para atribuir um ou mais atalhos de teclado a um comando. Os comandos disponíveis são listados no lado esquerdo da guia. O usuário pode selecionar qualquer comando disponível no menu. Somente comandos de menu podem ser associados a um atalho de teclado. Depois que o usuário insere um novo atalho, o botão Atribuir fica habilitado. Quando o usuário clica nesse botão, o aplicativo associa o comando selecionado a esse atalho.

Todos os atalhos de teclado atribuídos no momento estão listados na caixa de listagem na coluna à direita. O usuário também pode selecionar atalhos individuais e removê-los ou redefinir todos os mapeamentos para o aplicativo.

Se quiser dar suporte a essa personalização em seu aplicativo, você deve criar um objeto CKeyboardManager. Para criar um objeto CKeyboardManager, chame a função CWinAppEx::InitKeyboardManager. Esse método cria e inicializa um gerenciador de teclado. Se você criar um gerenciador de teclado manualmente, ainda deverá chamar CWinAppEx::InitKeyboardManager para inicializá-lo.

Se você usar o Assistente para criar seu aplicativo, o Assistente inicializará o gerenciador de teclado. Depois que o aplicativo inicializa o gerenciador de teclado, a estrutura adiciona uma guia Teclado à caixa de diálogo Personalização.

Personalização de mouse

A ilustração a seguir mostra a guia Mouse da caixa de diálogo Personalização.

Mouse tab in the Customize dialog box.
Guia Personalização de mouse

O usuário interage com essa guia para atribuir um comando de menu à ação de clique duplo do mouse. O usuário seleciona uma exibição do lado esquerdo da janela e usa os controles no lado direito para associar um comando à ação de clique duplo. Depois que o usuário clica em Fechar, o aplicativo executa o comando associado sempre que o usuário clica duas vezes em qualquer lugar na exibição.

Por padrão, a personalização do mouse não é habilitada quando você cria um aplicativo usando o Assistente.

Para habilitar a personalização do mouse

  1. Inicialize um objeto CMouseManager chamando CWinAppEx::InitMouseManager.

  2. Obtenha um ponteiro para o gerenciador do mouse usando CWinAppEx::GetMouseManager.

  3. Adicione exibições ao gerenciador do mouse usando o método CMouseManager::AddView. Faça isso para cada exibição que você deseja adicionar ao gerenciador do mouse.

Depois que o aplicativo inicializa o gerenciador de mouse, a estrutura adiciona a guia Mouse à caixa de diálogo Personalizar. Se você não adicionar nenhuma exibição, acessar a guia causará uma exceção sem tratamento. Depois de criar uma lista de exibições, a guia Mouse estará disponível para o usuário.

Ao adicionar uma nova exibição ao gerenciador de mouse, você fornece uma ID exclusiva. Se você quiser dar suporte à personalização do mouse para uma janela, deverá processar a mensagem WM_LBUTTONDBLCLICK e chamar a função CWinAppEx::OnViewDoubleClick. Quando você chama essa função, um dos parâmetros é a ID dessa janela. É responsabilidade do programador controlar os números de ID e os objetos associados a eles.

Problemas de segurança

Conforme descrito nas Ferramentas definidas pelo usuário, o usuário pode associar uma ID de ferramenta definida pelo usuário ao evento de clique duplo. Quando o usuário clica duas vezes em uma exibição, o aplicativo procura uma ferramenta de usuário que corresponda à ID associada. Se o aplicativo encontrar uma ferramenta correspondente, ele executará a ferramenta. Se o aplicativo não conseguir encontrar uma ferramenta correspondente, ele enviará uma mensagem WM_COMMAND com a ID para a exibição que foi clicada duas vezes.

As configurações personalizadas são armazenadas no registro. Ao editar o registro, um invasor pode substituir uma ID de ferramenta de usuário válida por um comando arbitrário. Quando o usuário clica duas vezes em uma exibição, a exibição processa o comando que o invasor plantou. Isso pode causar um comportamento inesperado e potencialmente perigoso.

Além disso, esse tipo de ataque pode ignorar as proteções de interface do usuário. Por exemplo, suponha que um aplicativo tenha a impressão desabilitada. Ou seja, em sua interface do usuário, o menu Imprimir e o botão não estão disponíveis. Normalmente, isso impede que o aplicativo imprima. Mas se um invasor editou o registro, agora um usuário poderá enviar o comando de impressão diretamente clicando duas vezes no modo de exibição, ignorando os elementos de interface do usuário que não estão disponíveis.

Para se proteger contra esse tipo de ataque, adicione código ao manipulador de comandos do aplicativo para verificar se um comando é válido antes de ser executado. Não dependa da interface do usuário para impedir que um comando seja enviado ao aplicativo.

Confira também

Personalização para MFC
Classe CKeyboardManager
Classe CMouseManager
Implicações de segurança da personalização