Cómo utilizar teclas de aceleración en un cuadro de diálogo modal en C++

Seleccione idioma Seleccione idioma
Id. de artículo: 222829 - Ver los productos a los que se aplica este artículo
Nota Microsoft Visual C++ .NET (2002) admite el modelo de código administrado suministrada por Microsoft .NET Framework y el modelo de código nativo no administrado de Microsoft Windows. La información de este artículo sólo se aplica al código no administrado de Visual C++.
Expandir todo | Contraer todo

Resumen

Teclas de aceleración son una característica común de interfaz de usuario de aplicaciones para Windows; por lo tanto, ¿por qué limiten ellos simplemente la aplicación? En este artículo muestra cómo agregar funcionalidad clave acelerador cualquier cuadro de diálogo modal.

Más información

Aceleradores de teclado se procesan llamando a la función TranslateAccelerator() en bucle de mensajes principal de la aplicación. Sin embargo, para un cuadro de diálogo modal, el bucle de mensaje de administrador de cuadro de diálogo (integrado en Windows) se utiliza para traducir y enviar mensajes. Por supuesto, debido a que este bucle de mensaje no es está diseñado para procesar los aceleradores, no llama la función TranslateAccelerator().

Para procesar las teclas de aceleración en un cuadro de diálogo modal, debe reemplazar PreTranslateMessage() del cuadro de diálogo función e intenta procesar el mensaje como un acelerador llamando:: TranslateAccelerator(). Si este método produce un error, a continuación, el procesamiento continúa llamando a la clase base PreTranslateMessage().

Para propósitos de este artículo, nos agregar funcionalidad clave acelerador al cuadro de diálogo de AboutBox de una aplicación MDI de MFC:
  1. Crear una aplicación MDI de MFC nueva denominada Test.
  2. Agregar un botón, con el ID de recurso "IDC_BUTTON1" para el recurso de cuadro de diálogo AboutBox.
  3. Haga doble clic en el botón para agregar un controlador para este botón y inserte el código siguiente como un indicador que funciona de la tecla de aceleración:
    AfxMessageBox("Hello");
  4. Insertar una tabla de aceleradores nuevo en el recurso.
  5. Agregar una tecla de aceleración a la tabla asociando la F5 fundamental para el identificador de recursos "IDC_BUTTON1".
  6. Agregue el m_hAccelTable variable, miembro, a la clase CAboutBox:
    HACCEL  m_hAccelTable;
  7. Inicializar m_hAccelTable en CAboutBox::CAboutBox:
    m_hAccelTable = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
  8. Utilice el Asistente de código para (el Asistente para clases en Visual C++ 6.0 y versiones anteriores) para agregar un reemplazo de PreTranslateMessage el para el CAboutDlg.
  9. En el método CAboutBox::PreTranslateMessage(), agregue las siguientes líneas 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. Compile y ejecute CTestApp.

resultados Tecla de aceleración F5 desencadena ahora el controlador de button1 cuando está activo el CAboutBox.

Referencias

Para adicional información acerca de acelerador clave procesamiento dentro de cuadros de diálogo modal, consulte en contacto con el siguiente artículo en Microsoft Knowledge Base:
INFORMACIÓN 100770: utilizar teclas de aceleración con la ventana de principal de cuadro de diálogo modal

Propiedades

Id. de artículo: 222829 - Última revisión: martes, 21 de noviembre de 2006 - Versión: 4.1
La información de este artículo se refiere a:
  • Microsoft Foundation Class Library 4.2 sobre las siguientes 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
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional
    • Microsoft Visual C++ 6.0 Professional
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard
    • Microsoft Visual C++ .NET 2003 Standard
Palabras clave: 
kbmt kbacceleratorkey kbhowto kbkeyaccel kbuidesign KB222829 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 222829

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com