3 votes

Comment utiliser F10 comme raccourci dans une application MFC utilisant un ruban ?

J'ai développé une application MFC en utilisant VS2008 et le pack de fonctionnalités MFC. L'interface utilisateur de cette application utilise un ruban.

J'ai maintenant besoin d'avoir F10 comme raccourci approprié pour l'une des fonctions critiques de mon application, mais il semble que je ne puisse pas définir l'accélérateur correctement, car il utilise toujours l'accélérateur du ruban par défaut au lieu du mien.

Savez-vous comment y parvenir ?

0voto

Bob Moore Points 4432

Je suppose que vous avez déjà essayé d'enregistrer un raccourci clavier. La façon canonique d'accéder à la touche est d'utiliser SetWindowsHookEx, pour le thread principal de votre application. Les hooks globaux de Windows sont lourds, et les restrictions de sécurité sur les hooks dans Vista/Win7/Server 2008 les ont rendus beaucoup moins utiles de toute façon. Mais un hook spécifique au processus serait parfait - et n'aurait pas besoin d'être dans une DLL.

0voto

DavidK Points 2741

Avez-vous essayé d'ajouter un gestionnaire pour WM_SYSKEYDOWN et de vérifier le code du message pour une valeur wParam de VK_F10 ? F10 a besoin d'un traitement spécial car il s'agit de l'ancienne alternative à l'appui sur la touche Alt pour ouvrir la barre de menu sous le contrôle du clavier.

0voto

Ramunas Points 36

J'ai eu le même problème et je l'ai résolu en ajoutant une méthode : BOOL virtuel PreTranslateMessage(MSG* pMsg) ;

BOOL CMyView::PreTranslateMessage(MSG* pMsg)
{
    if ((pMsg->message == WM_SYSKEYDOWN) && (pMsg->wParam == VK_F10))
    {
        OnMyAction(); //code on F10
        return TRUE;
    }
    return CView::PreTranslateMessage(pMsg);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X