Ziman
Messages postés245Date d'inscriptiondimanche 27 avril 2003StatutMembreDernière intervention26 septembre 2008
-
5 sept. 2006 à 03:35
Ziman
Messages postés245Date d'inscriptiondimanche 27 avril 2003StatutMembreDernière intervention26 septembre 2008
-
6 sept. 2006 à 01:19
Bonjour,
depuis que je programme avec l'API WIN32 en C, j'ai remarqué, que la touche tab de mes programmes ne fonctionne pas. Par exemple, je suis dans un Edit, je veux passer dans un autre, j'appuie sur Tab, j'entend juste un son et le focus reste sur le meme edit. Un autre problème un peu lié est le fait que bien que j'ajoute le style BS_DEFPUSHBUTTON a un de mes button, j'ai beau appuyé sur Entrée, rien ne se passe.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 5 sept. 2006 à 17:53
Pour le bouton par défaut, je viens de trouver une solution très simple. Le bouton doit avoir le style BS_DEFPUSHBUTTON et avoir IDOK comme identificateur. La boucle des messages modifiée comme précisé plus haut est indispensable:
hBouton=CreateWindowEx(0, "Button", "Ok", WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | WS_TABSTOP , 20, 20, 60, 20, hDlg, (HMENU)IDOK, 0, 0);
Je viens de faire des tests, ça marche nickel.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 5 sept. 2006 à 05:45
Salut,
Je suppose que tu utilises une boite de dialogue. Dans ce cas c'est simple, il suffit de donner à chaque controle le style WS_TABSTOP.
Pour le style BS_DEFPUSHBUTTON, j'avais rencontré ce problème il y'a longtemps déjà. Il parait qu'il ne sert à rien de l'ajouter. En effet, malgré ce style, la boite de dialogue ne le reconnait pas. Il suffit donc de le lui signaler avec le message DM_SETDEFID. Ce message permet de changer l'identificateur du controle par défaut agissant à la pression de la touche ENTREE.
Voici un petit exemple:
HWND hBouton;
hBouton= CreateWindowEx(0, "Button", "Ok", WS_VISIBLE | WS_CHILD | WS_TABSTOP , 20, 20, 60, 20, hDlg, (HMENU)1000, 0, 0);
SendMessage(hDlg, DM_SETDEFID ,1000,0);
Notre bouton à comme identificateur 1000 . C'est ce dernier qui sera envoyé à notre boite de dialogue via le message DM_SETDEFID.
A noter que je n'ai pas mis le style BS_DEFPUSHBUTTON pendant la création du bouton car c'est inutile.
Ziman
Messages postés245Date d'inscriptiondimanche 27 avril 2003StatutMembreDernière intervention26 septembre 2008 5 sept. 2006 à 15:59
Salut,
il ne s'agit pas d'une DialogBox, il s'agit d'une fenetre principale. J'ai quand meme essayé ce que tu m'as dit pour la touche tab mais cela ne fonctionne pas.
Ensuite pour le bouton, j'ai mis le message, il l'encadre de la bordure noire pour montrer qu'il est par défaut celui qui s'enfoncera à la pression de la touche Entrée, mais rien ne se passe quand j'appuye sur entré alors que l'Edit a le focus ... J'entend un son système (un chti doooooong) mais rien d'autre ...
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 5 sept. 2006 à 17:19
Bonjour,
Dans ce cas il suffit de modifier la boucle des messages dans ta winmain pour qu'elle ressemble à ceci:
MSG msg;
while (GetMessage(&msg, 0, 0, 0) )
{
if (!IsDialogMessage(hwnd, &msg) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Ceci permet le fonctionnement des tabulations dans une fenêtre mais ne résoud pas le problème du bouton par défaut. Personnellement je n'ai jamais eu besoin d'utiliser un tel bouton dans mes fenêtres. Si je trouve une solution pour ce cas spécial, je te la montrerai.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Ziman
Messages postés245Date d'inscriptiondimanche 27 avril 2003StatutMembreDernière intervention26 septembre 2008 6 sept. 2006 à 01:19
Ah voilà, ca fonctionne maintenant, je me suis un peu renseigné sur msdn sur IsDialogMessage que tu m'as indiqué et j'ai compris pourquoi tu fais cela.