Comment modifier par programme l’ordre des tabulations dans une boîte de dialogue Win32 ?
Question
Souvent, je dois ajouter un contrôle à une boîte de dialogue une fois la boîte de dialogue générée via le modèle de boîte de dialogue et CreateDialogIndirect.Dans ces cas, l'ordre de tabulation est défini par le modèle de boîte de dialogue et il n'existe aucun moyen évident de modifier l'ordre de tabulation en incluant un contrôle nouvellement créé.
La solution
J'ai récemment découvert que vous pouvez utiliser SetWindowPos pour y parvenir.Déterminez quel contrôle après lequel vous souhaitez insérer le nouveau contrôle dans l'ordre de tabulation, puis utilisez SetWindowPos comme ceci :
SetWindowPos(hNewControl, hOldControl, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
Cela modifie l'ordre z des contrôles qui, à son tour, établit l'ordre de tabulation.
Autres conseils
Je sais que c'est une vieille question mais voici comment le faire au moment de la compilation (ce qui est préférable dans la grande majorité des cas) :http://msdn.microsoft.com/en-us/library/7039hzb0(v=vs.80).aspx
Ma méthode préférée :
- Dans le menu Affichage, choisissez Ordre de tabulation.
- Choisissez Attribuer de manière interactive.
- Double-cliquez sur la boîte de commande à l'onglet à côté du contrôle que vous souhaitez être le premier contrôle dans l'ordre des onglets.
- Cliquez sur la zone d’ordre de tabulation pour chacun des autres contrôles.
- Cliquez n'importe où sur le formulaire pour enregistrer vos modifications et quitter le mode de commande d'onglet, ou appuyez sur ESC pour quitter le mode de commande d'onglet sans enregistrer vos modifications.