2008-10-09 6 views
0

J'ai une application MDI sdi qui utilise une fenêtre de séparation pour contenir un contrôle d'arborescence à côté de la vue principale affichant les données.Empêcher les vues de dérober le focus/définir le focus sur une vue

Lorsque l'utilisateur sélectionne quelque chose dans l'arborescence, cette vue reste active jusqu'à ce que l'utilisateur clique délibérément dans la fenêtre de données principale. Cela signifie que tous les boutons de la barre d'outils associés à la vue principale sont désactivés.

Est-il possible de basculer par programme le focus vers la vue principale après que l'utilisateur a cliqué sur le contrôle d'arborescence? Ou est-ce que je fais quelque chose de fondamentalement faux en utilisant un CSplitterWnd et 2 vues?

Répondre

1

Vous ne voulez pas ramener le focus à l'autre vue dès qu'un utilisateur clique sur l'arborescence: cela rendrait votre application inutilisable. par exemple. Cela empêcherait les utilisateurs de naviguer dans l'arborescence à l'aide du clavier, car l'arborescence ne garderait jamais suffisamment le focus.

Si vous voulez vraiment que la barre d'outils reflète l'état de votre 2ème vue (je ne suis pas sûr que ce soit une bonne idée), vous avez quelques options. Faites votre choix. 2 viennent à l'esprit:

  1. Votre vue arborescente ne devrait PAS être un CView. Utilisez un CTreeCtrl simple. Ce n'est pas très agréable car cela rompt un peu le paradigme doc/view (par exemple, il n'y a plus de OnUpdate() de l'arbre appelé chaque fois qu'un UpdateAllViews() est appelé).

  2. Empêche l'arborescence de devenir la vue active. Pour ce faire: 2.a. Lorsque vous affichez obtient le focus (OnFocus()):

STATIC_DOWNCAST (CFrameWnd, AfxMainWnd()) -> SetActiveView (pTheOtherView);

2.b. Dérivez une classe CMySplitterWnd de CSplitterWnd, puis surchargez CMySplitterWnd :: SetActivePane() pour l'empêcher de définir l'arborescence en tant que vue active.

Dans tous les cas, bienvenue dans le monde merveilleux de MFC internals où plonger dans le code source est le sport par jour obligatoire ;-)

Edit: ajout manquant pas

+1

Quelqu'un a dit - une expertise dans MFC vient de sachant comment vous pouvez le contourner! –

Questions connexes