[Win32] detecter enter dans une edit_box

detecter enter dans une edit_box [Win32] - C++ - Programmation

Marsh Posté le 19-11-2003 à 00:07:51    

j'ai essaye avec les differents messages que recoit une edit box mais pas moyen (detecter un changement ok mais pas le enter)
 
jai aussi essaye en mettant le bouton que je doit active qd on fait le enter sur default mais c pa bon puisque c ledit box qui a le focus ... help
 
--------------
 
 
sinon jaimerai mettre des smileys dans mon edit box de chat.... faut une richedit pour ca ? c difficile a gerer?
 
 

Reply

Marsh Posté le 19-11-2003 à 00:07:51   

Reply

Marsh Posté le 19-11-2003 à 00:08:35    

jtutilise pas mfc (juste le win32 bas niveau)

Reply

Marsh Posté le 19-11-2003 à 01:54:51    

j'en sais rien, mais avec un coup de spy++ tu devrais trouver en 10 min.

Reply

Marsh Posté le 19-11-2003 à 10:34:51    

Le truc c'est qu'il t'envoie peut etre pas de message du tout. Vérifie que tu as mis le style ES_WANTRETURN sur ton edit et que qu'il a aussi ES_MULTILINE (sinon le 1er style sert a rien). Avec ca tu recevras le EN_CHANGE pour la touche enter, et il ne te restes plus qu'a tester si le dernier char de ton edit est un '\n'.

Reply

Marsh Posté le 19-11-2003 à 12:38:40    

ok mais ca fait bricolage qd meme
 
pfff crosoft y mettent pleins d'options qui servent a rien dans leur os(genre Right to left layout dans le proprietes d'une boite de diag  :D ) mais pour le reste   :fou:


Message édité par red faction le 19-11-2003 à 12:38:47
Reply

Marsh Posté le 19-11-2003 à 12:41:40    

http://www.microsoft.com/middleeast/msdn/images/image003.jpg http://www.microsoft.com/middleeast/msdn/images/image004.jpg
 
 :whistle:  
 
 
 :lol:


Message édité par red faction le 19-11-2003 à 12:42:21
Reply

Marsh Posté le 19-11-2003 à 13:16:41    

se serait plutot les caracteres \r\n a detecter non ??
 
mais bon ya une autre methode a mon avis car si on fait ctrl-enter  y met \r\n aussi et dans msn si on fait ctrl-e ca nenvoie pas le msg , ca saute une ligne ....
 
 
help mon chat est vraiment penible a utiliser sans le "enter"


Message édité par red faction le 19-11-2003 à 13:18:12
Reply

Marsh Posté le 19-11-2003 à 13:33:38    

j'avais déjà eu ce problème...
le truc c'est que pour un edit simple (pas multiligne), le enter fait l'action associée au bouton par défaut.
Pour intercepter le enter, il faut passer par les messages non pas de l'edit mais de la fenetre, et donc regarder les WM_KEYDOWN, ... et si c'est enter et bien retourner false ou je sais plus quoi dans ta fonction callback de la boucle des messages.

Reply

Marsh Posté le 19-11-2003 à 13:53:30    

Il faut que tu rediriges les messages de tes composants vers une fonction. Si ton edit est IDC_EDIT, tu fais :

Code :
  1. WNDPROC oldProc = (WNDPROC)SetWindowLong(GetDlgItem(hwnd, IDC_EDIT), GWL_WNDPROC, (LONG)ZeProc);


Ensuite ta fonction callback ressemble a ca :

Code :
  1. LRESULT CALLBACK ZeProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  2. {
  3.   int id = GetDlgCtrlID(hwnd);
  4.   if (id == IDC_EDIT)
  5.   {
  6.     switch (uMsg)
  7.     {
  8.       case WM_KEYDOWN :
  9.         if (wParam == VK_TAB)
  10. {
  11. // Touche tab...
  12. }
  13. if (wParam == VkKeyScan(0x0D))
  14. {
  15. // Touche entree...
  16. }
  17. break;
  18. }
  19. }
  20. return CallWindowProc(oldProc, hwnd, uMsg, wParam, lParam);
  21. }


 
 

Reply

Marsh Posté le 19-11-2003 à 16:20:41    

[:xp1700] marche impec
 
sinon on peut limiter le nombre de char a placer dans une edit autrement quand faisant un getwindowtext puis en comptant le nombre de caracteres

Reply

Marsh Posté le 19-11-2003 à 16:20:41   

Reply

Marsh Posté le 19-11-2003 à 16:26:07    

hellbilly a écrit :

Il faut que tu rediriges les messages de tes composants vers une fonction. Si ton edit est IDC_EDIT, tu fais :

Code :
  1. WNDPROC oldProc = (WNDPROC)SetWindowLong(GetDlgItem(hwnd, IDC_EDIT), GWL_WNDPROC, (LONG)ZeProc);


Ensuite ta fonction callback ressemble a ca :

Code :
  1. LRESULT CALLBACK ZeProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  2. {
  3.   int id = GetDlgCtrlID(hwnd);
  4.   if (id == IDC_EDIT)
  5.   {
  6.     switch (uMsg)
  7.     {
  8.       case WM_KEYDOWN :
  9.         if (wParam == VK_TAB)
  10. {
  11. // Touche tab...
  12. }
  13. if (wParam == VkKeyScan(0x0D))
  14. {
  15. // Touche entree...
  16. }
  17. break;
  18. }
  19. }
  20. return CallWindowProc(oldProc, hwnd, uMsg, wParam, lParam);
  21. }


 
 
 


 
on peut pas virer le oldproc ? ca fait une var globale en + :sweat:  
 
et les var globales c mal  :o

Reply

Marsh Posté le 19-11-2003 à 16:31:23    

red faction a écrit :

[:xp1700] marche impec
 
sinon on peut limiter le nombre de char a placer dans une edit autrement quand faisant un getwindowtext puis en comptant le nombre de caracteres


Et la msdn ?
msg a envoyer a ton edit : EM_LIMITTEXT

Reply

Marsh Posté le 19-11-2003 à 16:42:10    

red faction a écrit :


 
on peut pas virer le oldproc ? ca fait une var globale en + :sweat:  
 
et les var globales c mal  :o  


euh c'est pas trop conseillé  ;)  
Sinon tu peux utiliser une variable statique d'une classe, ou la mettre dans un namespace anonyme.
 
edit: tu peux aussi stocker dans ta fenetre des donnees (par exemple, un pointeur sur un objet) et tu les recupere avec la fonction GetWindowLong


Message édité par hellbilly le 19-11-2003 à 16:58:27
Reply

Marsh Posté le 19-11-2003 à 19:02:28    

ok merci tout est nikel maintenant
 
sinon jaimerai mettre des smileys dans mon edit box de chat.... faut une richedit pour ca ? c difficile a gerer?
 
 
et pour ca?
 

Reply

Marsh Posté le 19-11-2003 à 23:47:56    

red faction a écrit :

ok merci tout est nikel maintenant
 
sinon jaimerai mettre des smileys dans mon edit box de chat.... faut une richedit pour ca ? c difficile a gerer?
 
 
et pour ca?
 
 


http://www.codeguru.com/richedit/richeditrc.html

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed