2010-11-05 4 views
0

Dites que j'ai un grand cadre d'application dans lequel je veux que l'entrée par défaut soit un widget central particulier dans cette trame. Si une touche, comme delete ou escape, est pressée:MFC: Gestion des événements de caractères dans une trame ou une application

  • Dans un contrôle qui écoute cette touche, je veux que le contrôle la gère.
  • Dans un contrôle qui ne se soucie pas de cette clé, je veux qu'il passe au widget central.

Dans WX, j'étais capable de le faire avec la clé d'échappement en remplaçant ProcessEvent dans l'application. J'ai alors dit à la base de l'application d'essayer de le traiter (ce qui enverrait l'événement au contrôle pour la tentative de traitement) et si ce n'était pas le cas, je l'enverrais au bon widget. Je n'arrive pas à trouver un corrélatif dans MFC. Il semble que les événements de personnage ne soient jamais envoyés dans l'arborescence de la fenêtre aux parents ou à l'application. Que puis-je faire?

+0

Il n'y a pas de réponse à cette question. Cela ne peut pas être fait. PreTranslate est trop tôt et il n'y a pas d'autre option. –

Répondre

1

Vous devriez pouvoir intercepter tous les messages WM_KEYDOWN en remplaçant CWinApp::PreTranslateMessage dans votre classe dérivée CWinApp.

Exemple:

BOOL CMyApp::PreTranslateMessage(MSG* pMsg) 
{ 
    if (pMsg->message == WM_KEYDOWN) { 
     // Do something special with this message 
    } 

    return CWinApp::PreTranslateMessage(pMsg); 
} 
+0

Ne laisse pas le widget avec focus essayer de le traiter avant de le filtrer mais le fait-il? –

Questions connexes