Touche Tab inopérationelle

Résolu
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 septembre 2008 - 5 sept. 2006 à 03:35
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 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.

Comment cela se fait-il ?

Merci d'avances pour vos réponses.

Apprendre le VB6

5 réponses

racpp Messages postés 1910 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 15
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.
3
racpp Messages postés 1910 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 15
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.

<link href ="../../../../../css/ie4.css" type="text/css" rel="stylesheet" /><!-- @ --><link href="../../../../../css/inetsdk.css" type="text/css" rel="stylesheet" /><!-- @ --><style type="text/css"><![CDATA[
PRE.clsCode { font-size:110%; }
PRE.clsSyntax { font-size:100%; }
TD DIV.clsBeta { display:none;}

A:link { color:#0000ff; text-decoration:underline;}
A:visited { color:#0000ff; text-decoration:underline;}
A:hover { color:#3366ff; text-decoration:underline;}
MSHelp\:link {
color:#0000ff;
text-decoration:underline;
cursor:hand;
hoverColor:#3366ff;
filterString: ;}
]]></style><link href="ms-help://Hx/HxRuntime/HxLink.css" type="text/css" rel="stylesheet" />

<xml id="_topicdata" pagetype="winmsg" proj="WinUIHXS" name="DM_SETDEFID" pubpath="/WinUI/WindowsUserInterface/Windowing/DialogBoxes/DialogBoxReference/DialogBoxMessages/DM_SETDEFID.htm"><!-- topic data --><root></root></xml>

<xml xmlns=""><mshelp:keyword index="A" term="_win32_DM_SETDEFID"></mshelp:keyword><mshelp:keyword index="A" term="_win32_DM_SETDEFID_cpp"></mshelp:keyword><mshelp:toctitle title="DM_SETDEFID Message"></mshelp:toctitle><mshelp:rltitle title="DM_SETDEFID Message ()"></mshelp:rltitle><mshelp:keyword index="F" term="DM_SETDEFID"></mshelp:keyword><mshelp:keyword index="K" term="DM_SETDEFID"></mshelp:keyword><mshelp:attr name="TopicType" value="kbRef"></mshelp:attr><mshelp:attr name="Locale" value="kbEnglish"></mshelp:attr><mshelp:attr name="DevLang" value="C++"></mshelp:attr><mshelp:attr name="Technology" value="WinUI"></mshelp:attr><mshelp:attr name="TechnologyVers" value="kbWinUI"></mshelp:attr><mshelp:attr name="DocSet" value="WCSDK"></mshelp:attr><mshelp:attr name="DocSet" value="LHSDK"></mshelp:attr><mshelp:attr name="DocSet" value="PSDK"></mshelp:attr><mshelp:attr name="TargetOS" value="Windows"></mshelp:attr><mshelp:attr name="TopicType" value="apiref"></mshelp:attr><mshelp:attr name="APIName" value="DM_SETDEFID"></mshelp:attr><mshelp:attr name="APIType" value="NA"></mshelp:attr><mshelp:attr name="TopicType" value="kbSyntax"></mshelp:attr></xml>
0
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 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 ...

Apprendre le VB6
0
racpp Messages postés 1910 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 15
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 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.

Merci beaucoup de ton aide :p

Apprendre le VB6
0