2017-08-21 1 views
0

J'ai un problème avec une vue/fenêtre qui a une arborescence sur la gauche puis une vue de style de liste sur la droite qui affiche "stuff" correspondant au nœud de l'arbre sélectionné sur la droite. Très similaire à la façon dont Windows Explorer ressemble et fonctionne. La "substance" peut être affichée sous forme de liste, de grandes icônes ou de petites icônes ou informations. Le problème que j'ai est que si l'un des nœuds de l'arbre sélectionné est un nœud 'espace réservé', alors 'select all' est exécuté depuis le menu Edit, puis après l'option 'delete' dans le menu Edit est grisé même si tous les éléments de la vue RHS sont marqués comme sélectionnés et peuvent en fait être supprimés en toute sécurité. Ceci peut être corrigé en sélectionnant le nœud de l'arborescence sur un autre nœud, en sélectionnant de nouveau le même nœud de l'arborescence, puis en sélectionnant une vue différente: liste, grande icône, petite icône ou vue d'information initialement sélectionnée. Les instructions de trace me montrent que dans le deuxième scénario de travail, les éléments de la vue de droite sont passés à une fonction «puis-je supprimer» alors que lorsque les choses ne fonctionnent pas, c'est le nom du nœud de vue arborescente passé à la fonction "puis-je supprimer". lorsque la fonction "puis-je supprimer" renvoie true, l'option "delete" est activée dans le menu Edition et, lorsqu'elle est false, elle n'est pas activée.C++ MFC modifier menu focus

Existe-t-il un moyen de forcer la 'mise au point' à défaut d'un meilleur mot dans la liste de droite, l'info, etc. lorsque 'Tout sélectionner' est sélectionné dans le menu Edition pour que cela fonctionne ? Je pense que le problème est que le menu Edit est différent (sensible au contexte) en fonction de la vue active ('it') et que les fils sont croisés et que le menu Edit est affiché pour l'arborescence quand il le faut être pour la vue de la liste des nœuds RHS. C'est de trouver comment résoudre ce problème avec lequel je me bats.

Merci

Répondre

0

Vous avez des problèmes avec le routage des commandes MFC.

Vérifiez où vous avez placé le gestionnaire pour les commandes.

un gestionnaire de commandes est recherché dans cette séquence:

  1. vue active
  2. document
  3. modèle de document
  4. fenêtre de trame
  5. application.

Je suppose que vous avez gestionnaire dans les points de vue, et la mise au point (vue active) change

Vous pouvez modifier la commande de routage à savoir dans le cadre et demander à toutes les vues attachées au document de gérer une commande ... vous devez écraser OnCmdMsg pour cela.

Voir plus de détails here

+0

Votre réponse semble avoir connecté dans mon cerveau des fils de codage. J'ai trouvé le gestionnaire OnEditSelectAll dans les classes list/info et j'ai appelé Setactiveview sur la framewindow parent à partir de là en m'assurant que la vue était sur la liste/info et la fonctionnalité de suppression semble maintenant fonctionner correctement. Merci! Bien que pas sûr si ce que j'ai fait est techniquement un hack ou pas ... ;-) – Keith