begin process at 2012 05 29 10:46:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Autre

 > 

Edit_box et la touche Enter


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Edit_box et la touche Enter

mercredi 6 septembre 2006 à 11:25:17 | Edit_box et la touche Enter

by_rabbit_08

Bonjour!
Je sais que cette question a été posée plusieurs fois, mais pas exactement comme je l'aimerais, et malgré tout ce que j'ai lu, je n'arrive pas à faire ce que je veux...
C'est un problème simple:
J'ai une edit box, et un bouton. J'aimerais que lorsque le curseur se trouve dans l'edit box, après avoir écris du texte, en pressant simplement la touche enter, on a par exemple une MessageBox avec le qui apparaisse, ou quoi que ce soit... Est-ce que quelqu'un pourrait m'aider?
Merci d'avance!
By_rabbit_08
mercredi 6 septembre 2006 à 11:46:15 | Re : Edit_box et la touche Enter

Joky

Membre Club
WNDPROC wOldProc;

LRESULT CALLBACK EditProc(HWND hWnd, ...)
{
    char szTxt[255];

    switch(Msg)
    {
       case WM_CHAR:
          if(lParam == VK_ENTER)
          {
                GetWindowText(hWnd, szTxt, 255);
                MessageBox(hWnd, szTxt, "szAppName", 0x40);
          }
       return 0;
     }
    return DefWindowProc(hWnd, ...);
}
               
         
         
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, ..., ...)
{
    switch(Msg)
    {
       case WM_CREATE:   //WM_INITDIALOG:
              wOldProc = (WNDPROC)SetWindowLong(GetDlgItem(hWnd, ID_EDIT), GWL_WNDPROC, (LONG)EditProc);
             return 0;
    }
    return DefWindowProc(...);
}

ULARGE_INTEGERJokyQi=QI("Joky"

mercredi 6 septembre 2006 à 11:46:54 | Re : Edit_box et la touche Enter

Joky

Membre Club
Désolé VK_ENTER c'est en faite VK_RETURN

ULARGE_INTEGERJokyQi=QI("Joky"

mercredi 6 septembre 2006 à 11:50:08 | Re : Edit_box et la touche Enter

mogwai93

pour recuperer un evenement special dans un edit box (comme l'appui de la touche entree)
il te faut utiliser SetWindowLong

exemple rapide :
// tu crees ton edit
OldEditProc= (WNDPROC) SetWindowLong(hWndMonEdit, GWL_WNDPROC, (LPARAM)EditProc);


LRESULT CALLBACK EditProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 switch (message)
 {
 // tu codes ici l'evenement dont tu as besoin avec le resultat que tu veux
  }
}
mercredi 6 septembre 2006 à 13:27:31 | Re : Edit_box et la touche Enter

yoyo269

Membre Club
Juste pour info by_rabbit_08, cette technique s'appelle du sous classement.
Elle est même généralisable aux autres contrôles, pour récupérer des messages.

YOYO, @+.

"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"

mercredi 6 septembre 2006 à 13:35:56 | Re : Edit_box et la touche Enter

vecchio56

Administrateur CodeS-SourceS
Avec GWL_WNDPROC, plutot utiliser SetWindowLongPtr pour ne pas avoir de mauvaises surprises quand on compile en 64 bits

_____________________________________
Un éditeur de ressources gratuit pour Windows

mercredi 6 septembre 2006 à 18:25:29 | Re : Edit_box et la touche Enter

by_rabbit_08

Merci pour toute vos réponses, je vais méditer dessus :)
+
By_rabbit_08
mercredi 6 septembre 2006 à 18:51:59 | Re : Edit_box et la touche Enter

by_rabbit_08

J'ai donc essayé de réaliser ceci, dans un code de base. J'ai simplement pris l'exemple de base d'un fenêtre sans rien, je lui ai rajouté un edit avec CreateWindowEx et j'ai également ajouté un bouton. J'ai ensuite essayé d'adapter mon code sous différentes façons, et j'ai obtenu ceci avec la méthode de Joky, où il y avait un exemple un peu plus concret:

#include <windows.h>

#define EDIT 101
#define BOUTON 102

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

HWND edit, bouton;

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;              
    MSG messages;         
    WNDCLASSEX wincl;      

    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;   
    wincl.style = CS_DBLCLKS;            
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;               
    wincl.cbClsExtra = 0;                   
    wincl.cbWndExtra = 0;                   
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

  
    if (!RegisterClassEx (&wincl))
        return 0;

   
    hwnd = CreateWindowEx (
           0,             
           szClassName,     
           "Windows App",
           WS_OVERLAPPEDWINDOW,
           CW_USEDEFAULT,    
           CW_USEDEFAULT,    
           544,            
           375,            
           HWND_DESKTOP,    
           NULL,             
           hThisInstance, 
           NULL              
           );
          
    edit = CreateWindowEx (
           WS_EX_OVERLAPPEDWINDOW,
           "EDIT",        
           "",   
           WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL|ES_NOHIDESEL,
           10, 
           10,   
           100,            
           20,               
           hwnd,       
           (HMENU)EDIT,               
           hThisInstance,      
           NULL                
           );
          
   
    bouton = CreateWindowEx (
           0,
           "BUTTON",        
           "Valider",      
           WS_VISIBLE|WS_CHILD,
           10,     
           35,  
           100,        
           20,       
           hwnd,       
           (HMENU)BOUTON,       
           hThisInstance,    
           NULL          
           );
   
   
 
    ShowWindow (hwnd, nFunsterStil);
    UpdateWindow(hwnd);
 
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }

    return messages.wParam;
}

WNDPROC wOldProc;

LRESULT CALLBACK EditProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    char szTxt[255];

    switch(message)
    {
       case WM_CHAR:
          if(lParam == VK_RETURN)
          {
                GetWindowText(edit, szTxt, 255);
                MessageBox(hwnd, szTxt, "szAppName", 0x40);
          }
       return 0;
     }
    return DefWindowProc(hwnd, message, wParam, lParam);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
    switch(Msg)
    {
       case WM_CREATE:   //WM_INITDIALOG:
              wOldProc = (WNDPROC)SetWindowLong(GetDlgItem(hwnd, EDIT), GWL_WNDPROC, (LONG)EditProc);
             return 0;
    }
    return DefWindowProc(hwnd, Msg, wParam, lParam);
}


LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                
    {
        case WM_DESTROY:
            PostQuitMessage (0);     
            break;
        default:                   
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}

Malheureusement cela ne marche pas mieu... Est-ce que vous auriez des informations complémentaire? Quelque chose que je devrais modifier dans mon code?
Merci d'avance!
By_rabbit_08

mercredi 6 septembre 2006 à 18:59:12 | Re : Edit_box et la touche Enter

racpp

Administrateur CodeS-SourceS
Salut,
Il existe aussi une autre technique plus simple. Tu définis un bouton par défaut. Ce dernier réagit à la pression de la touche ENTREE même qaund le focus se trouve dans un Edit. Le bouton peut être soit visible, soit caché. Regarde cette page qui traite des deux cas, boite de dialogue ou fenêtre: Bouton BS_DEFPUSHBUTTON.

mercredi 6 septembre 2006 à 18:59:45 | Re : Edit_box et la touche Enter

vecchio56

Administrateur CodeS-SourceS
-GetDlgItem(hwnd, EDIT) ne fonctionne pas car l'edit n'est pas encore créé à ce moment
-A quoi sert WndProc? Tout mettre dans WindowProcedure
Dans EditProc: ne pas utiliser DefWindowProc mais CallWindowProc(wOldProc, ...

_____________________________________
Un éditeur de ressources gratuit pour Windows


1 2

Cette discussion est classée dans : box, edit, enter, touche


Répondre à ce message

Sujets en rapport avec ce message

Edit Box + Default Button [ par Manson ] Salut,j'avais trouve sur msdn comment faire mais je ne le retrouve pas. J'aimerai associer une fonction a une touche dans un editbox. Par exemple dire Touche return sur contrôle EDIT [ par ArthurAuguste ] Bonjour, J’ai une fenêtre principale et une fenêtre enfant, ma fenêtre enfant est un simple contrôle "EDIT" créé avec CreateWindow("EDIT",…..). Je vou ecrire dans un edit box en MFC [ par eklouste ] Slt a tous En fait j'ai cree une boite de dialogue avec MFC application ainsi qu'un edit control dans la boite de dialogue. J'aimerais savoir comment Aidez moi SVP : Verrouillage de la touche "Entrée" du clavier [ par clad1986 ] Bonjour à vous tous, Je tourne sur Win XP Pro avec Microsoft Visual Studio 2003. Je code en C++. Voici mon problème : Dans mon programme, j'ai une c Détection de touche dans un edit [ par Brice25 ] Bonjour à tous, je fais appel à vous car j'ai besoin d'aide pour mon projet de BTS. Je développe un appli sous C++ Builder 5 pro. J'aimerais détecter Edit Box [ par iMouss ] Salut tout le mondeJ'ai une edit box contenant une variable membre : m_var de type CStringj'aimerais que lors de la saisie de l'utilisateur, il sa fas Probleme d'EditBox [ par SergentP ] Salut,J'ai créer une fenêtre avec un edit box et je cherche à le redimensionner lorsque un WM_SIZING est envoyé, pour cela jutilise SetWindowPos comme Edit Box ou CEdit, comment modifier les fontes, etc.. [ par mouloudh ] Bonjour la communauté !Pour ceux qui me reconnaitront, merci beaucoup pour leurs aide !Je travaille toujours sur le même projet, cad un CDialog.J'ai i WIN32 Edit box avec le style ES_NUMBER [ par Pistol_Pete ] Bonjour à tous,J'ai un Edit box qui possède le style ES_NUMBER.J'aimerai, lorsque j'entre des chiffres, qu'il m'affiche un espace symbolisant  les mil


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,279 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales