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

  FORUM HardWare.fr
  Programmation
  C++

  problème sur la récupération d'un controle edit.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème sur la récupération d'un controle edit.

n°1781005
KM Master
Posté le 01-09-2008 à 15:02:17  profilanswer
 

Salut!
Alors mon objectif est de faire une fenêtre a l'intérieur de laquelle il y a un controle edit, et un bouton ok. Alors on écrit dans la zone texte, et quand on clique sur OK, je voudrais que dans une messagebox s'affiche ce qu'on a tapé.
Bon, je n'utilise pas de ressource pour cette application Windows. Voici ma fonction WindowProcedure de réception des messages:
 

Code :
  1. LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3.     HWND hwnd2; 
  4.     HWND hwnd3;   
  5.        
  6.          
  7.           char*bouh=new char[10000];
  8.          
  9.          
  10.          
  11.          
  12.            
  13.            
  14.  
  15.     switch (message)                  /* handle the messages */
  16.     {
  17.           case WM_CREATE:
  18.                
  19.           hwnd2=CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,"EDIT","sui",WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL,10,10,175,24,hwnd,NULL,GetModuleHandle(NULL),NULL);
  20.          hwnd3=CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,"BUTTON","OK",WS_VISIBLE|WS_CHILD,100,100,100,20,hwnd,NULL,GetModuleHandle(NULL),NULL);
  21.              
  22. /* bon, ici, je crée les deux controles edit et le bouton, lors de la création de la fenêtre */
  23.                break;
  24.           case WM_COMMAND:
  25.              
  26.                switch(wParam){
  27.                              
  28.                                
  29.                               case BN_CLICKED:
  30.                                    GetWindowText(hwnd2,bouh,10000);
  31.                                    MessageBox(NULL,bouh,"",10000);
  32. /* et ici, quand on clique sur OK, ca met dans "bouh" le texte de l'edit, et dans la messagebox on affiche bouh */
  33.                                  
  34.                                  
  35.                                  
  36.                                  
  37.                    
  38.                                    break;
  39.                                  
  40.                              
  41.                               }
  42.              
  43.                break;
  44.        
  45.                
  46.         case WM_DESTROY:
  47.             PostQuitMessage(0);
  48.                        
  49.             break;
  50.         default:                     
  51.             return DefWindowProc (hwnd, message, wParam, lParam);
  52.     }
  53. delete[] bouh;
  54.     return 0;
  55. }

 
Bon, bien sur ca ne marche pas. J'ai bien une fenêtre et un edit, mais quand je clique sur OK, ca me met une messagebox, avec rien dedans.
pourtant quand dans GetWindowText, je met hwnd au lieu de hwnd2, ca m'affiche bien le texte "windows app" de la fenetre principale.
 
J'ai fait pas mal de tests et j'ai l'impression qu'en fait quand dans la structure switch, si dans un case je fais une certaine instruction (par exemple modifier la valeur d'une variable) dans les autres case, si je fais une instruction qui dépend de cette modification, (par exemple je demande d'afficher la variable), ca va pas marcher, comme s'il avait oublié ce qui c'était passé dans le case précédent. Ca me parait pas normal.
Bon j'espere que j'ai été clair et dans les règles.
 
salut!

mood
Publicité
Posté le 01-09-2008 à 15:02:17  profilanswer
 

n°1781062
olivthill
Posté le 01-09-2008 à 16:58:38  profilanswer
 

C'est presque bon. Il fraudrait juste revoir le cours d'informatique sur les "scopes" des variables, sur la différence entre les variables déclarées sur la pile et celles déclarées sur le tas. Le problème se situe là :

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HWND hwnd2;  
    HWND hwnd3;  

Les handles sont déclarés en tant que variable provisoires sur la pile. Leur contenu sera susceptible d'être écrasé dès que le programme sortira de la fonction WindowProcedure. Quand le programme y rentrera à nouveau, les contenus de hwnd2 et hwnd3 seront donc différents et Windows sera perdu.
 
A la place, il faudrait avoir des variables globales ou statiques, par exemple :

HWND hwnd2;  
HWND hwnd3;    
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

n°1781164
KM Master
Posté le 01-09-2008 à 21:21:19  profilanswer
 

Pfiou, ca marche nickel. Faudra effectivement que je vois ces histoire de piles. Merci beaucoup en tout cas


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

  problème sur la récupération d'un controle edit.

 

Sujets relatifs
IE7 et problème de session php HELP8[Problème] Static linking dans un makefile
supprimer caractère unicode invalideprobléme avec fonction if dans oracle forms
Problème argument par défaut statiqueProblème d'affichage perl
Script bash - Problème d'espace dans une variable RESOLU[Javascript] Problème liste déroulante et jquery
Probleme controle Word via Excel 
Plus de sujets relatifs à : problème sur la récupération d'un controle edit.


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