billy5938
Messages postés2Date d'inscriptionjeudi 9 novembre 2006StatutMembreDernière intervention12 août 2007
-
12 août 2007 à 00:01
billy5938
Messages postés2Date d'inscriptionjeudi 9 novembre 2006StatutMembreDernière intervention12 août 2007
-
12 août 2007 à 19:36
Bonjour,
Je veux pouvoir parcourir les champs d'édition (ou même des checkBox) d'une fenetre. En utilisant la methode IsDialogMessage dans la boucle de gestion des message et en ajoutant le WS_TABSTOP sur les éléments, tout va bien si les éléments sont des fils direct de la fenetre principale.
Par commodité, je veux regrouper mes boutons et champs dans un GROUPBOX. Comme ça je fais la disposition d'un ensemble et je bouge le tout en ne changeant que les coordonnées du groupbox. Dans ce cas la mes éléments ne sont plus fils direct de la fenetre principale mais du GROUPBOX. Et dans ce cas là la tabulation ne fonctionne plus.
Je ne vois pas quoi modifier pour faire marcher le tout. Si je vire le IsDialogMessage, j'obtiens bien le VK_TAB via un WM_COMMAND mais uniquement si je suis sur une zone de la fenetre principale. J'avais fait un subclass pour avoir ma methode de gestion de evenement sur les objets du GROUPBOX (j'avais un bouton pour ouvrir une fenetre de selection d'un fichier qui ne fonctionnait plus). Mais dans cette fonction je ne vois passer aucune WM_COMMAND avec le VK_TAB.
Si quelqu'un a une idée ou mieux directement la solution parce que ce serait un grand classique du winapi, je suis preneur
Ci-joint un code simplifier où il y a un groupbox et 4 edit, les deux 1er dans le groupbox (fils du) et les deux autres directement fils de la fenetre principale.
Cordialement
Pour compiler sous gcc (j'utilise mingw32):
gcc -o simple.exe simple.c -mwindows
billy5938
Messages postés2Date d'inscriptionjeudi 9 novembre 2006StatutMembreDernière intervention12 août 2007 12 août 2007 à 19:36
Salut,
Merci pour la proposition de gestion des fenêtres mais c'est un peu lourd à mon goût. Et puis j'ai fini par trouver la solution. Dans le GROUPBOX, à la création de cette fenêtre, il faut mettre WS_EX_CONTROLPARENT pour que le la gestion du WS_TABSTOP soit récursive dans les enfants de celle-ci.
Donc il faut changer le code précedent en:
gp1=CreateWindowEx(WS_EX_CONTROLPARENT,"BUTTON","GROUPBOX",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,10,10,250,80,hwnd,NULL,0,NULL);
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 12 août 2007 à 16:57
Salut,
Normalement, les controles ayant le style WS_TABSTOP doivent avoir la même fenêtre mère. Si tu veux que certains controles se déplacent suivant ton groupbox, tu peux sous-classer ce dernier. Pendant le traitement de WM_MOVE (ou WM_WINDOWPOSCHANGED), tu repositionnes les controles que tu veux par rapport à la nouvelle position du groupbox.