Personalização de Mouse e teclado
MFC permite que o usuário do seu aplicativo para personalizar como ele manipula a entrada de mouse e teclado.O usuário pode personalizar a entrada de teclado atribuindo atalhos de teclado para comandos.O usuário também pode personalizar a entrada do mouse, selecionando o comando deve ser executado quando o usuário clica duas vezes dentro do windows específico do aplicativo.Este tópico explica como personalizar a entrada para seu aplicativo.
No personalização caixa de diálogo, o usuário pode alterar os controles personalizados para o teclado e o mouse.Para exibir esta caixa de diálogo, o usuário aponta para Personalizar na modo menu e depois clicar barras de ferramentas e encaixe.Na caixa de diálogo, o usuário clica ou o teclado guia ou o Mouse guia.
Personalização do teclado
A ilustração a seguir mostra a teclado guia de personalização caixa de diálogo.
Guia de personalização do teclado
O usuário interage com a guia de 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.Comandos do menu podem ser associados um atalho de teclado.Depois que o usuário insere um novo atalho, o Atribuir botão se torna ativado.Quando o usuário clica nesse botão, o aplicativo associa o comando selecionado esse atalho.
Todos os atalhos de teclado atribuído no momento sã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 do aplicativo.
Se você quiser suportar essa personalização em seu aplicativo, você deve criar um CKeyboardManager objeto.Para criar um CKeyboardManager de objeto, chamar a função CWinAppEx::InitKeyboardManager.Esse método cria e inicializa um gerente de teclado.Se você criar o Gerenciador de um teclado manualmente, você ainda deve chamar CWinAppEx::InitKeyboardManager para inicializá-lo.
Se você usar o Assistente para criar seu aplicativo, o assistente irá inicializar o Gerenciador de teclado.Depois que seu aplicativo inicializa gerente de teclado, a estrutura adiciona um teclado guia para a personalização caixa de diálogo.
Personalização de mouse
A ilustração a seguir mostra a Mouse guia de personalização caixa de diálogo.
Guia de personalização de mouse
O usuário interage com este guia para atribuir um menu de comando para o mouse duas vezes em ação.O usuário seleciona um modo de exibição do lado esquerdo da janela e usa os controles do lado direito para associar um comando com a ação de clique duplo.Após o usuário clica Fechar, o aplicativo executa o comando associado sempre que o usuário clica duas vezes em qualquer lugar no modo de exibição.
Por padrão, a personalização de mouse não está habilitada quando você criar um aplicativo usando o assistente.
Para ativar a personalização de mouse
Inicializar um CMouseManager objeto chamando CWinAppEx::InitMouseManager.
Obter um ponteiro de mouse manager usando CWinAppEx::GetMouseManager.
Adicionar modos de exibição para o Gerenciador de mouse usando o CMouseManager::AddView método.Faça isso para cada modo de exibição que deseja adicionar ao gerente de mouse.
Depois que seu aplicativo inicializa gerente de mouse, a estrutura adiciona o Mouse guia para a Personalizar caixa de diálogo.Se você não adicionar qualquer exibição, acessando a guia causará uma exceção não tratada.Após você ter criado uma lista de modos de exibição, o Mouse guia está disponível para o usuário.
Se você adicionar uma nova exibição para o gerente de mouse, você atribuir uma ID exclusiva.Se desejar oferecer suporte a personalização de mouse para uma janela, você deve processar o WM_LBUTTONDBLCLICK mensagem e chamada de CWinAppEx::OnViewDoubleClick função.Quando você chamar essa função, um dos parâmetros é a identificação de janela.É responsabilidade do programador para controlar os números de identificação e os objetos associados a eles.
Preocupações com segurança
Conforme descrito em Ferramentas definidas pelo usuário, o usuário pode associar um ID de ferramenta definida pelo usuário com o evento de clique duplo.Quando o usuário clica duas vezes em um modo de exibição, o aplicativo procura uma ferramenta de usuário que corresponde a identificação do associado.Se o aplicativo encontra uma ferramenta correspondente, ele executa a ferramenta.Se o aplicativo não é possível encontrar uma ferramenta correspondente, ele envia uma mensagem WM_COMMAND com a identificação para o modo de exibição que foi clicado duas vezes.
As configurações personalizadas são armazenadas no registro.Editando o registro, um invasor pode substituir uma identificação de ferramenta válida de usuário com um comando arbitrário.Quando o usuário clica duas vezes em um modo de exibição, o modo de exibição processa o comando que o invasor plantado.Isso pode causar comportamento inesperado e potencialmente perigoso.
Além disso, esse tipo de ataque pode ignorar proteções de interface do usuário.Por exemplo, suponha que um aplicativo tem impressão desativada.Isto é, na interface do usuário, o Print menu e botão não estão disponíveis.Normalmente, isso impede que o aplicativo de impressão.Mas se um invasor editado o registro, um usuário poderia agora poderia enviar o comando Imprimir diretamente clicando duas vezes em 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 para o manipulador de comando do aplicativo para verificar se um comando é válido antes de ser executado.Não dependem de interface do usuário para impedir que um comando enviado para o aplicativo.