Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2398 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Boite de dialogue et saisie de string

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Boite de dialogue et saisie de string

n°521456
iceteapech​e
www.iceteapeche.com
Posté le 23-09-2003 à 16:00:25  profilanswer
 

Rebonjour tous,
 
je vous jure que cette fois y aura pas de code moche ;)
 
mon probleme est simple, j'ai fait fonction qui saisie la string entrée dans une boite de dialogue dans une variable globale char TempString[20]. J'aimerai en fait que cette chaine finisse dans un tableau qui est declaré dans la fonction main et non pas en global. Le probleme c'est que j'ai essayé de passer mon tableau en argument de ma fonction DlgProc mais ca ne marche pas, je ne sais pas a quel niveau ; des que je rentre dans le gestionnaire de messages de la boite de dialogue l'adresse du tableau change... Je vous mets juste un extrait de code :
 

Code :
  1. char Nom[20];
  2. void GetName(char Nom[])
  3. {
  4.         hDlg=CreateDialog(hInstance,(LPCTSTR)ID_NAME,NULL,(DLGPROC)GetNameProc);
  5. SetFocus(hDlg);
  6. }
  7. BOOL CALLBACK GetNameProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam, char Nom[])
  8. {
  9.     switch (message)
  10.     {
  11.         case WM_COMMAND:
  12.             switch (LOWORD(wParam))
  13.             {
  14.                 case IDOK:
  15.                     if(GetDlgItemText(hDlg, IDC_NAME,TempString, 20))
  16.                     {
  17.                         for (i=0;i<20;i++)
  18.                         {
  19.                           Nom[i]= TempString[i];
  20.                         }
  21.                     }
  22.                 case IDCANCEL:
  23.                     EndDialog(hDlg, wParam);
  24.                     SetFocus(hWnd);
  25.                     return TRUE;
  26.             }
  27.     }
  28.     return FALSE;
  29. }


 
Voila j'espere que c'est pas trop crade et que vous pourrez m'aider.
 
Merci


Message édité par iceteapeche le 23-09-2003 à 16:02:39

---------------
Se souvenir des belles choses...
mood
Publicité
Posté le 23-09-2003 à 16:00:25  profilanswer
 

n°521470
red factio​n
Posté le 23-09-2003 à 16:16:19  profilanswer
 

IceTeaPeche a écrit :

Rebonjour tous,
 
je vous jure que cette fois y aura pas de code moche ;)
 
mon probleme est simple, j'ai fait fonction qui saisie la string entrée dans une boite de dialogue dans une variable globale char TempString[20]. J'aimerai en fait que cette chaine finisse dans un tableau qui est declaré dans la fonction main et non pas en global. Le probleme c'est que j'ai essayé de passer mon tableau en argument de ma fonction DlgProc mais ca ne marche pas, je ne sais pas a quel niveau ; des que je rentre dans le gestionnaire de messages de la boite de dialogue l'adresse du tableau change... Je vous mets juste un extrait de code :
 

Code :
  1. char Nom[20];
  2. void GetName(char Nom[])
  3. {
  4.         hDlg=CreateDialog(hInstance,(LPCTSTR)ID_NAME,NULL,(DLGPROC)GetNameProc);
  5. SetFocus(hDlg);
  6. }
  7. BOOL CALLBACK GetNameProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam, char Nom[])
  8. {
  9.     switch (message)
  10.     {
  11.         case WM_COMMAND:
  12.             switch (LOWORD(wParam))
  13.             {
  14.                 case IDOK:
  15.                     if(GetDlgItemText(hDlg, IDC_NAME,TempString, 20))
  16.                     {
  17.                          for (i=0;i<20;i++)
  18.                         {
  19.                           Nom[i]= TempString[i];
  20.                         }
  21.                     }
  22.                 case IDCANCEL:
  23.                     EndDialog(hDlg, wParam);
  24.                     SetFocus(hWnd);
  25.                     return TRUE;
  26.             }
  27.     }
  28.     return FALSE;
  29. }


 
Voila j'espere que c'est pas trop crade et que vous pourrez m'aider.
 
Merci


 
 
strcpy non ?


Message édité par red faction le 23-09-2003 à 16:17:28
n°521472
iceteapech​e
www.iceteapeche.com
Posté le 23-09-2003 à 16:19:36  profilanswer
 

a la limite le strcpy remplace mon for... Mais le pb c'est que l'adresse de Nom[] merde des qu'elle passe dans le Proc... je comprends pas pkoi y a aucune raison. :S  
En plus je suis obligé de faire la copie dans le Proc parceque sinon je n'ai aucun moyen de determiner si la fenetre est fermée ou pas, vu qu'il n'y a pas de programmation chronologique sur windows :'(


---------------
Se souvenir des belles choses...
n°521495
Konar
Posté le 23-09-2003 à 16:49:50  profilanswer
 

c'est koi cette DLGPROC avec un char* a la fin ? (char* ki a le meme nom ke ta globale au passage, d'ou la possible ratance)
 
c'est normal que la fct GetName() prenne un parametre 'Nom' qui est pas utilisé ?

n°521497
Konar
Posté le 23-09-2003 à 16:52:34  profilanswer
 

IceTeaPeche a écrit :

a la limite le strcpy remplace mon for... Mais le pb c'est que l'adresse de Nom[] merde des qu'elle passe dans le Proc... je comprends pas pkoi y a aucune raison. :S  
En plus je suis obligé de faire la copie dans le Proc parceque sinon je n'ai aucun moyen de determiner si la fenetre est fermée ou pas, vu qu'il n'y a pas de programmation chronologique sur windows :'(


 
ben une DLGPROC c'est :
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
 
alors rajouter un char* evidemment ca passe a la compilation grace au cast, mais ce que contient ce char* quand tu rentres dans la dlgproc, ca doit etre le mystere...

n°521498
iceteapech​e
www.iceteapeche.com
Posté le 23-09-2003 à 16:53:08  profilanswer
 

nonononon
 
dslé c ma presentation qui est po claire ;)
 
Ma globale c'est TempString, Nom c'est ma variable de WinMain() que je veux egaliser a la saisie. Mais apparement je ne peux mettre dans GetTextDlg qu'une globale, alors j'essaye d'egaliser les deux variables apres.. mais pkoi l'adresse pointée par Nom change quand elle passe dans Proc?


---------------
Se souvenir des belles choses...
n°521500
iceteapech​e
www.iceteapeche.com
Posté le 23-09-2003 à 16:54:43  profilanswer
 

Oki, voilou pkoi l'adresse de Nom merde
 
alors y a aucun moyen :S?
 
on ne peut stocker une saisie que dans une globale avec zindoz?


---------------
Se souvenir des belles choses...
n°521501
red factio​n
Posté le 23-09-2003 à 16:56:40  profilanswer
 

:o


Message édité par red faction le 23-09-2003 à 19:31:44
n°521502
iceteapech​e
www.iceteapeche.com
Posté le 23-09-2003 à 16:56:40  profilanswer
 

Autre algo qui peut marcher c'est ne rendre la main a GetName() qu'une fois que EndDialog est executée...
 
C'est possible ca?
 
Svp, gourous du windows, repondez moi


---------------
Se souvenir des belles choses...
n°521503
Konar
Posté le 23-09-2003 à 16:57:41  profilanswer
 

IceTeaPeche a écrit :

Oki, voilou pkoi l'adresse de Nom merde
 
alors y a aucun moyen :S?
 
on ne peut stocker une saisie que dans une globale avec zindoz?


 
et oui, c'est comme ca...
d'ailleurs je te conseille de mettre tout en global.

mood
Publicité
Posté le 23-09-2003 à 16:57:41  profilanswer
 

n°521512
Konar
Posté le 23-09-2003 à 17:09:25  profilanswer
 

IceTeaPeche a écrit :

Autre algo qui peut marcher c'est ne rendre la main a GetName() qu'une fois que EndDialog est executée...
 
C'est possible ca?
 
Svp, gourous du windows, repondez moi


 
t'as de la chance ke j'ai rien d'autre a faire...
 
utilise DialogBoxParam(), ki ne rend la main que quand tu fermes la DialogBox, et qui te permet de spécifier un parametre (un LPARAM donc ce ke tu veux). ce parametre se récupere dans ta dlgproc, ds le msg WM_INITDIALOG, ds la var lParam.
 
donc tu passes ton char* dans DialogBoxParam (dernier parametre), puis tu le sauvegardes dans le case WM_INITDIALOG, pour t'en re-servir plus tard.
 
bien sur y a d'autres solutions, mais en voila une...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Boite de dialogue et saisie de string

 

Sujets relatifs
méthodes de dialogue port série !!!!std::string et majuscule/minuscule
const string & Class::Methode()Copie de buffer dans formulaire de saisie de msg
[VBa - Exel] Récupération du n° de la ligne d'une donnée saisie[EXCEL] Exécuter une macro suite à une saisie
[Resolu] Pb avec un tableau de string en property[ASP] Dialogue utilisateur-AI
comment convertit ton un string en variable Tmemo ?Pb dans la transformation d'un String en int..
Plus de sujets relatifs à : [C++] Boite de dialogue et saisie de string


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR