2009-08-01 13 views
3

Nous avons une application MFC relativement grande qui utilise un SDI pour héberger un certain nombre de vues CView créées dynamiquement. La structure de base de l'application est un peu comme Outlook (arborescence à gauche, vue dynamique à droite).Gestion du focus de saisie sur une application de vue multiple SDI MFC

J'ai été énigmatique sur la façon correcte de gérer le changement de mise au point dans l'application. Par exemple, j'aimerais pouvoir appuyer sur 'tab' alors que le focus est dans l'arborescence (vue de gauche), et déplacer le focus vers la bonne vue. Bien que je puisse capturer la touche de tabulation dans l'arborescence ctrl et passer manuellement à la vue appropriée, nous avons beaucoup de types de vue différents (certains basés sur CFormView), et beaucoup de contrôles séparateurs et je ne suis pas sûr qu'il existe un générique manière de le gérer. Je sais qu'il est facile de définir le focus dans un CDialog ou CFormView (en utilisant simplement le gestionnaire d'ordre de tabulation intégré dans Visual Studio), mais une application qui héberge plusieurs types de vue et barres de séparation, etc., est beaucoup plus complexe . Par exemple, si le focus est actuellement dans une vue de formulaire, lorsque je clique sur la fin de l'ordre de tabulation de vue de formulaire, comment puis-je détecter que je dois modifier le focus d'entrée à une autre vue (dynamique)?

Bravo et merci à tous.

Darren.

Répondre

0

Une réponse évidente serait de simplifier l'interface utilisateur elle-même. Un autre consiste à simplement «tabuler» à l'intérieur d'une vue et obliger l'utilisateur à utiliser la souris pour passer d'une vue à l'autre; Alternativement, vous pouvez créer un élément de menu Affichage et laisser l'utilisateur choisir la vue en faisant une sélection de menu (le clavier pourrait être utilisé, par exemple, pour choisir la vue 1 en appuyant sur Alt-V-1).

La dernière option serait ce que vous avez mentionné vous-même: détecter la touche de tabulation et gérer tout vous-même.