2009-07-22 9 views
0

Je développe une interface graphique en C++ en utilisant dev-C++.Win API C++ Control Edition obligatoire

J'ai un contrôle d'édition comme ceci:

hctrl = CreateWindowEx(
         0, 
         "EDIT",   /* Nombre de la clase */ 
         "",    /* Texto del título, no tiene */ 
         ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | 
         ES_NUMBER , /* Estilo */ 
         85, 43,   /* Posición */ 
         90, 25,   /* Tamaño */ 
         hwnd,   /* Ventana padre */ 
         (HMENU)ID_TEXTO2, /* Identificador del control */ 
         hInstance,  /* Instancia */ 
         NULL);   /* Sin datos de creación de ventana */ 
SendMessage(hctrl, WM_SETFONT, (WPARAM)hfont, 
MAKELPARAM(TRUE, 0)); 

Je veux les utilisateurs d'introduire un numéro de téléphone dans ce domaine. C'est un champ obligatoire.

J'ai besoin que le bouton OK de cette interface graphique soit désactivé jusqu'à ce que le champ soit correctement rempli. Il pourrait aussi être possible d'appuyer sur le bouton mais un message indiquant que vous devez remplir le champ vide s'affiche.

J'ai essayé ceci:

switch (HIWORD(wParam)) { 
    case BN_CLICKED: 
     switch (LOWORD(wParam)) { 
      ... 
      ... 
      case ID_BOTON9: 
       hctrl = GetDlgItem(hwnd,ID_TEXTO2);  
       len = GetWindowTextLength(GetDlgItem(hwnd,ID_TEXTO2)); 
       if (len == 0) 
        MessageBox(hctrl, "Número no válido","Error", MB_ICONEXCLAMATION | MB_OK); 
       break; 
      ... 
     } 
    break; 
} 

Mais cela ne fonctionne pas.

Quelqu'un peut-il faire la lumière?

Merci d'avance.

+0

ne fonctionne pas est pas grand chose à continuer. En quoi ça ne marche pas? –

+0

Lorsque j'appuie sur le bouton rien ne se passe si le champ est vide ... – deb

+0

J'ai besoin que le bouton soit désactivé si le champ est vide ou doit être activé et affiche un message disant que vous devez remplir le champ. – deb

Répondre

1

Créez une fonction de validation qui renvoie un booléen indiquant si la saisie dans votre fenêtre est correcte ou non. Si elle renvoie false, désactivez le bouton OK et éventuellement afficher une boîte de message ou, de préférence, déclencher une notification ballon sur le contrôle d'édition afin que l'utilisateur ne soit pas ennuyé par un autre OK qu'il doit pousser afin de corriger son erreur.

Ensuite, vous pouvez écouter la notification EN_CHANGE provenant de la boîte d'édition et valider l'entrée avec la fonction ci-dessus.

Mais d'abord, déboguez votre application pour vous assurer que l'événement BN_CLICKED est géré par vous correctement.

2

Utilisez ceci:

interrupteur (uMsg)

{ 

case WM_COMMAND:  

    {  
     switch (LOWORD(wParam)) 

     { 
      case YourButton: 

      { 

       //Check your Number 

       //If the Number validate do what you need to do, if not, show a message and break. 

       MessageBox(hwnd,"Your message","Mesage",0); 

       break; 

      }