or ni l'ajout de WS_TABSTOP , ni le sousclassement ne permettent de gérer l'appui sur la touche TAB
(alors que le sousclassement détecte l'appui des autres touches...)
seuls les boutons d'en bas (suivant, précent, aide, ..) fonctionnent :(
racpp
Messages postés1910Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201416 12 déc. 2008 à 22:02
Salut,
Avec une boite de dialogue, le style WS_TABSTOP suffit. Mais pour une fenêtre, la boucle des messages doit ressembler à ceci:
MSG msg;
while(GetMessage(&msg,0,0,0))
{
if(!IsDialogMessage(hwnd,&msg))
{
DispatchMessage(&msg);
TranslateMessage(&msg);
}
}
racpp
Messages postés1910Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201416 13 déc. 2008 à 12:13
Il s'agit donc d'une boite de dialogue. Ca devrait fonctionner normalement sans sous-classement des controles. Il y'a peut-être un truc dans le code qui empêche le fontionnement normal de la boite. Dans la procédure de sous-classement d'un controle appartenant à une boite de dialogue, certaines touches du clavier comme TAB et ENTREE sont par défaut transmises à la boite mère. Si on veut les capturer il faut traiter le message WM_GETDLGCODE pour les laisser passer.
Je vais jeter un coup d'oeil sur le code de gagah1.
racpp
Messages postés1910Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201416 13 déc. 2008 à 13:10
Je viens de regarder le code de gagah1. En effet seuls les boutons que
tu as mentionnés fonctionnent avec la touche TAB car eux seuls
appartiennent directement à la boite de dialogue principale. Les
autres, comme le bouton "Parcourir" sont créés dans des classes perso
et n'ont pas le même parent. Je ne sais pas pourquoi gagah1 a procédé
ainsi mais je trouve la méthode un peu tordue. Je pense qu'il serait
préférable de mettre tous les controles dans la boite de dialogue
principale et de ne montrer que ceux dont on a besoin pour une étape
précise et cacher les autres. Ca aurait beaucoup simplifié les choses
et aurait permis d'adapter le code facilement. Tu peux poser la
question sur la page du code source. Tu auras peut-être une réponse de
son auteur qui connait bien ses propres classes.