Utilistation de WS_TABSTOP [Résolu]

Signaler
Messages postés
106
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
11 février 2008
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
re Bonjour

J'ai créé une boite de dialogue avec beaucoup de controles, certains ont le style WS_TABSTOP. Le probleme c'est que quand j'appuis sur la touche TAB le focus ne change pas. J'ai du oublier quelque chose mais quoi ? (Ca fait une heure que je trifouille la MSDN mais j'ai rien trouvé)

Si quelqu'un a une idée je suis toute ouie ...

Merci d'avance
A voir également:

7 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Solution ici:
DIALOGBOX PAR CREATEDIALOG (WIN32)
http://www.cppfrance.com/code.aspx?id=21138

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Tu es bien certain que c'est une dialogbox ??? Normalement le système prend en charge par défaut le déplacement par la touche TAB.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
106
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
11 février 2008

J'en suis certain. C'est vraiment trés bizare ...

Voila ce que dit la MSDN :
"The WS_TABSTOP style specifies the controls to which the user can move by pressing the TAB key or SHIFT+TAB keys.

When the user presses TAB or SHIFT+TAB, the system first determines whether these keys are processed by the control that currently has the input focus. It sends the control a WM_GETDLGCODE message, and if the control returns DLGC_WANTTAB, the system passes the keys to the control. Otherwise, the system uses the GetNextDlgTabItem function to locate the next control that is visible, not disabled, and that has the WS_TABSTOP style"

Je suis pas trés doué en anglais mais d'apres ce que j'ai compris le controle qui a le focus ne doit pas renvoyer la valeur DLGC_WANTTAB. Mais ca ne m'avance pas plus ...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
download ça:
http://www.cppfrance.com/code.aspx?ID=35788

et regarde le fichier rc, tu verras que absolument tout est par défaut et tab_stop fonctionne.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
106
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
11 février 2008

Alors voila je t'envoie le code que j'ai créer qui est tout simple mais ou tab_stop ne fonctionne pas. Tu me dira ce que t'en penses ...

main.c :
#include <windows.h>

#define ID_DIALOG 10

LRESULT CALLBACK mainProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

int main()
{
MSG msg;

CreateDialog(GetModuleHandle(NULL),MAKEINTRESOURCE(ID_DIALOG),NULL,(WNDPROC)mainProc);

while ( GetMessage(&msg,NULL,0,0) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

LRESULT CALLBACK mainProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
case WM_COMMAND :
switch (LOWORD(wParam))
{
case IDCANCEL :
PostQuitMessage(0);
return 0;

default :
return 0;
}

default :
return 0;
}
}

main.rc :
#include <windows.h>

#define ID_DIALOG 10

ID_DIALOG DIALOGEX 0, 0, 120, 40
STYLE DS_CENTER | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Test"
FONT 10, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,14,10,40,16,WS_TABSTOP
PUSHBUTTON "Annuler",IDCANCEL,72,10,40,16,WS_TABSTOP
END

Voila c'est tout
Messages postés
106
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
11 février 2008

Encore une fois merci beaucoup !!!!!!!

Va faloir que j'étudie le pourquoi du comment de ton code (et oui je débute en programmation API windows) mais c'est genial de voir que ca marche enfin !!
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
C'est le:
if(!IsDialogMessage(hmain, &msg))
dans la boucle GetMessage(...)
et attention à bien mettre hmain à 0 quand détruite.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++