Utilistation de WS_TABSTOP

Résolu
spiky31 Messages postés 106 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 février 2008 - 31 janv. 2006 à 15:47
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 1 févr. 2006 à 09:42
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

7 réponses

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

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
3
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
31 janv. 2006 à 16:36
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++
0
spiky31 Messages postés 106 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 février 2008
31 janv. 2006 à 16:51
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 ...
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
31 janv. 2006 à 17:20
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++
0

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

Posez votre question
spiky31 Messages postés 106 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 février 2008
31 janv. 2006 à 20:44
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
0
spiky31 Messages postés 106 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 février 2008
31 janv. 2006 à 22:29
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 !!
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
1 févr. 2006 à 09:42
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++
0