2009-07-22 8 views
0

Ich entwickle eine GUI in C++ mit dev-C++.Win API C++ - Steuerelement Bearbeiten erforderlich

Ich habe ein Edit-Steuerelement wie folgt aus:

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)); 

Ich Mitglieder möchten eine Telefonnummer in diesem Bereich einzuführen. Es ist ein Pflichtfeld.

Ich brauche, dass die OK-Schaltfläche dieser GUI deaktiviert ist, bis das Feld korrekt ausgefüllt ist. Es könnte auch möglich sein, dass Sie den Knopf drücken könnten, aber eine Nachricht wurde angezeigt, dass Sie das leere Feld ausfüllen müssen.

Ich habe versucht, dieses:

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; 
} 

Aber das funktioniert nicht.

Kann jemand Licht darauf werfen?

Vielen Dank im Voraus.

+0

nicht funktioniert, ist nicht viel weiter zu gehen. Wie funktioniert es nicht? –

+0

Wenn ich die Taste drücke, passiert nichts, wenn das Feld leer ist ... – deb

+0

Ich brauche die Schaltfläche, die deaktiviert werden soll, wenn das Feld leer ist oder aktiviert werden soll und eine Meldung angezeigt wird, dass das Feld ausgefüllt werden muss. – deb

Antwort

1

Erstellen Sie eine Validierungsfunktion, die ein Bool zurückgibt, das angibt, ob die Eingabe in Ihrem Fenster korrekt ist oder nicht. Wenn sie false zurückgibt, deaktivieren Sie die Schaltfläche OK und zeigen Sie optional ein Meldungsfeld an, oder lösen Sie vorzugsweise eine Sprechblasenbenachrichtigung auf dem Bearbeitungssteuerelement aus, damit der Benutzer nicht genervt wird, um seinen Fehler zu korrigieren.

Dann können Sie auf EN_CHANGE Benachrichtigung von der Editbox hören und die Eingabe mit der obigen Funktion validieren.

Aber zuerst Debuggen Sie Ihre Anwendung, um sicherzustellen, dass das BN_CLICKED-Ereignis von Ihnen ordnungsgemäß behandelt wird.

2

verwenden:

Schalter (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; 

      }