2008-12-09 5 views
0

Sous Windows, lorsque vous appuyez sur Alt et le relâchez à nouveau, la barre de menus est activée. Toutefois, lorsque vous appuyez sur Alt, puis cliquez sur, puis relâchez, la barre de menus ne s'active pas car vous vouliez probablement appuyer sur Alt + clic, pas activer la barre de menus.Comment annuler l'état 'clé système enfoncée' dans Windows

Je veux prendre en charge les changements de molette de la souris Alt + (qui correspondraient au défilement horizontal). Cela fonctionne bien, mais si vous êtes prêt et relâchez la touche Alt, la barre de menu s'active. Évidemment, ce n'est pas souhaitable. Il doit y avoir une sorte d'action que Windows effectue en interne lorsque vous cliquez sur Alt + clic pour annuler l'indicateur interne "ActivateMenuBarWhenAltIsReleased". Si je sais ce que c'est, je peux le faire moi-même quand je reçois un message de la molette de la souris. Donc, est-ce que quelqu'un sait comment fonctionne le système qui active la barre de menu lorsque vous appuyez sur Alt et relâchez, et comment l'annuler? Merci!

Répondre

2

Lorsque vous relâchez la touche Alt, le système génère un message WM_SYSCOMMAND/SC_KEYMENU. De plus, à moins que vous n'appuyiez sur une touche pour ouvrir un menu contextuel spécifique, le paramètre lparam sera égal à 0. DefWindowProc, à sa réception, entrera dans la boucle du menu. Donc, tout ce que vous avez à faire est de détecter ce message et l'empêcher d'accéder à DefWindowProc:

LRESULT CALLBACK MainWndProc(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam) 
{ 
    switch (msg) { 
     // ... 
     case WM_SYSCOMMAND: { 
      DWORD cmd = wparam & 0xfff0; 
      // test for Alt release without any letter key pressed 
      if (cmd == SC_KEYMENU && lparam == 0) { 
       // don't let it reach DefWindowProc 
       return 0; 
      } 
      break; 
     } 
     // ... 
    } 

    return DefWindowProc(wnd, msg, wparam, lparam); 
} 
+0

Cela peut fonctionner pour une application, mais j'écris un plug-in donc je n'ai pas de contrôle sur la boucle de message principale ... –

Questions connexes