Tabulation

mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023 - 12 déc. 2008 à 09:01
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 13 déc. 2008 à 13:10
Bonjour

J'essaie de rajouter les tabulations dans un programme qui se base sur l'excellent code de gagah1
http://www.cppfrance.com/codes/GENERATEUR-FICHIER-INSTALLATION-WIN32_35466.aspx

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 :(

Comment résoudre ce problème ?

Merci

4 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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);
    }
}
0
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
13 déc. 2008 à 07:01
sauf qu'il n'y a pas de boucle des messages

puisque la fenetre est appelee de cette maniere :
DialogBoxParam(hInstance, (LPCTSTR)IDD_APP, 0, AppDlgProc, 0);

donc toujours au meme point....
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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.
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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.
0
Rejoignez-nous