Question

Lors de l'exécution d'une ancienne application MFC dans le débogueur de Visual Studio, j'ai constaté de nombreux avertissements dans la fenêtre de sortie, comme suit:

  

Avertissement: ignorer les boutons non radio du groupe.

Je comprends que dans MFC, vous mettez des boutons radio dans des groupes pour indiquer quels ensembles de boutons radio vont ensemble. Si je me souviens bien, faites ceci en définissant le " groupe " propriété du premier bouton radio sur true, puis définissez le reste des boutons radio "groupe". propriété à false.

J'ai trois questions à propos de cet avertissement.

  1. Comment vous débarrasser de cet avertissement? Faire vous devez définir le " groupe " propriété de tous contrôles de bouton non radio à true pour éviter cela, ou devriez-vous simplement définir pour le premier contrôle après la dernier bouton radio?

  2. Existe-t-il un moyen facile de comprendre quels contrôles ou dialogues ont ce problème? Je pourrais ouvrir chaque dialogue et jouer avec jusqu'à ce que l'avertissement saute vers le haut. Cette application a beaucoup de dialogues bien, donc il serait bien s'il y avait un moyen plus facile.

  3. Quel comportement négatif peut-il se produire si vous ne corrigez pas cet avertissement? En d'autre mots, est-ce même important?

Était-ce utile?

La solution

L'avertissement signifie qu'il y a un contrôle autre qu'un bouton radio dans l'ordre de tabulation entre les premier et dernier boutons radio du groupe. Un contrôle avec le jeu de styles WS_GROUP marque le début d'un groupe.

Pour résoudre ce problème, utilisez l’éditeur de dialogue pour modifier l’ordre de tabulation et assurez-vous que tous les boutons radio sont numérotés de manière séquentielle. Pour ce faire, vous pouvez également ouvrir le fichier .rc dans un éditeur de texte et modifier l’ordre des instructions dans chaque ressource de la boîte de dialogue (l’ordre de tabulation est simplement défini par l’ordre dans lequel les contrôles sont répertoriés).

Je pense que vous pouvez ignorer cet avertissement en toute sécurité, à condition que le groupe de boutons d'option fonctionne correctement.

Autres conseils

Entre les réponses ici et certaines recherches effectuées sur d’anciens forums, je pense avoir au moins trouvé le moyen de résoudre mes problèmes. Voici ce que j'ai découvert pour mes questions ci-dessus.

  1. ChrisN et Smashery m'ont suggéré de réorganiser les onglets pour m'assurer que les boutons radio sont ordonnés de manière séquentielle, ce qui a résolu certains des avertissements.

    En outre, la propriété WS_GROUP doit être définie sur le premier contrôle de l'ordre de tabulation après le groupe de boutons d'option (ou la propriété de groupe définie sur true dans l'éditeur). Cela indique au MFC que le groupe de boutons radio est terminé. Sans cela, tous les contrôles restants dans l'ordre de tabulation jusqu'au prochain WS_GROUP généreront l'avertissement. Après avoir effectué ces deux opérations, les avertissements de ces boîtes de dialogue ont disparu.

  2. Il s'agit toujours d'une question ouverte. Je n'ai pas trouvé de moyen de localiser ces problèmes sans ouvrir chaque boîte de dialogue et attendre des avertissements.

    Si vous savez qu'une boîte de dialogue crée cet avertissement mais que vous ne savez pas quel contrôle en est la cause, vous pouvez définir un point d'arrêt dans la fonction DDX_Radio () sur l'appel TRACE () qui génère l'avertissement. Cela peut faciliter l'identification du contrôle spécifique faisant l'objet de la plainte.

  3. Je suis d'accord avec ChrisN, je ne vois aucune raison pour cet avertissement autre que celle de vous obliger à vérifier votre ordre de tabulation. Ailleurs en ligne, je ne trouve aucune autre référence à un problème que cela pourrait causer.

Peut-être vérifiez votre ordre de tabulation (Format / Ordre de tabulation) - cela ressemble à un bouton-poussoir normal au milieu d'un groupe de boutons radio. Si tel est en fait le problème, vous pouvez y remédier en utilisant l’élément de menu Format / Ordre de tabulation, puis en cliquant sur les commandes dans le bon ordre.

Pour le point 2, c’est la raison pour laquelle je suppose que vous laissez cette question sans réponse, je ne peux imaginer une chose plus simple que de faire une recherche de texte (* .rc) pour tous les dialogues avec des boutons radio. Pour chaque résultat, inspectez visuellement le code de la ressource et corrigez-le. Je le ferais à la main dans la source du fichier de ressources plutôt que d'essayer de jouer avec le concepteur d'interface graphique.

Pour ce que cela vaut, j’avais 3 boutons radio dans le bon ordre de tabulation (confirmé dans le fichier .rc sans aucun problème après) et j’ai toujours eu un avertissement. Le point d'arrêt dans DDX_Radio a montré que les 2e et 3e boutons radio étaient signalés comme non-radio! Regardé dans resource.h et découvert le premier bouton radio utilisant l'ID 1313 et les deux autres utilisant 1311 et 1312. Placez-les dans l'ordre de tabulation souhaité et renumérotez les ID en fonction du problème résolu. Je suppose que GW_HWNDNEXT GetWindow est lié d’une manière ou d’une autre par ordre d’ID, et non par ordre de tabulation, même si le groupe radio a fonctionné. Remarque: toujours en utilisant Visual C ++ v6

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top