DetailPage-MSS-KB

Base de Dados de Conhecimento

Artigo: 222829 - Última revisão: terça-feira, 21 de Novembro de 2006 - Revisão: 4.1

 
Nota Microsoft Visual C++ .NET (2002) suporta o modelo de código gerido que é fornecido pelo Microsoft .NET Framework e o modelo de código do Microsoft Windows nativo não gerido. As informações neste artigo aplicam-se apenas ao código de Visual C++ não gerido.

Sumário

Teclas de atalho são uma funcionalidade de interface de utilizador comum de aplicações do Windows; por conseguinte, limitá-los porque apenas a aplicação? Este artigo mostra como adicionar funcionalidades chave do atalho a qualquer caixa de diálogo modal.

Mais Informação

Aceleradores de teclado são processados pelo chamar a função TranslateAccelerator() num ciclo de mensagem principal da aplicação. No entanto, para uma caixa de diálogo modal, o ciclo de mensagem do Gestor do diálogo caixa (incorporado no Windows) é utilizado para converter e envio de mensagens. Obviamente, porque este ciclo de mensagem não foi concebido para processar aceleradores, não chama a função TranslateAccelerator().

Para processar combinações de teclas numa caixa de diálogo modal, tem de substituir PreTranslateMessage() a caixa de diálogo funcionar e tentar processar a mensagem como um atalho chamando:: TranslateAccelerator(). Se este método falhar, em seguida, processar continua chamando a classe base PreTranslateMessage().

Para efeitos deste artigo, é adicionar funcionalidade chave acelerador à caixa de diálogo AboutBox de uma aplicação MFC MDI:
  1. Crie uma nova aplicação MFC MDI nome Test.
  2. Adicione um botão com o ID do recurso "IDC_BUTTON1" ao recurso de caixa de diálogo AboutBox.
  3. Faça duplo clique no botão para adicionar uma rotina de tratamento para este botão e insira o seguinte código como um indicador que a tecla de atalho funciona:
    AfxMessageBox("Hello");
  4. Inserir uma nova tabela Accelerator para o recurso.
  5. Adicionar uma chave de acelerador à tabela, associando a F5 chave o ID do recurso "IDC_BUTTON1".
  6. Adicionar m_hAccelTable variável, o membro, a classe CAboutBox:
    HACCEL  m_hAccelTable;
  7. Inicializar m_hAccelTable em CAboutBox::CAboutBox:
    m_hAccelTable = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
  8. Utilize o Assistente de código (a classe de assistente no Visual C++ 6.0 e versões anteriores) para adicionar uma substituição do PreTranslateMessage para o CAboutDlg.
  9. Método CAboutBox::PreTranslateMessage(), adicione as seguintes linhas de código:
    BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg) {
       if (m_hAccelTable) {
          if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg)) {
             return(TRUE);
          }
       }
       return CDialog::PreTranslateMessage(pMsg);
    
    }
  10. Compilar e executar CTestApp.

resultados Tecla de atalho F5 agora acciona a rotina de tratamento de button1 quando o CAboutBox está activo.

Referências

Para obter informações adicionais sobre a tecla de atalho nas caixas de diálogo modal de processamento, consulte o seguinte artigo na base de dados de conhecimento da Microsoft:
INFO 100770  (http://support.microsoft.com/kb/100770/EN-US/ ) : utilização de chaves Accelerator com janela de principal de caixa de diálogo modal

A informação contida neste artigo aplica-se a:
  • Microsoft Foundation Class Library 4.2 nas seguintes plataformas
    • Microsoft Visual C++ 4.1 Subscription
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
Palavras-chave: 
kbmt kbacceleratorkey kbhowto kbkeyaccel kbuidesign KB222829 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 222829  (http://support.microsoft.com/kb/222829/en-us/ )
Partilhar
Opções de suporte adicionais
Fóruns de Suporte da Comunidade Microsoft
Contacte-nos directamente
Encontre um parceiro certificado Microsoft
Loja Microsoft