Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372

    [C++ api keyboard focus]

    Volevo controllare i valori degli edit quando si lasciava il campo attraverso EN_KILLFOCUS che notifica quando
    edit control perde il keyboard focus. Per il test ho tre edit ed un bottone e questo è il frammento di codice:


    case WM_COMMAND:
    if (HIWORD(wParam) == EN_KILLFOCUS) {
    if (GetFocus() != NULL && GetParent(GetFocus()) != NULL) {
    if (GetDlgCtrlID((HWND) lParam) != IDC_BTN1) {
    controlla(LOWORD(wParam));
    }
    }
    }
    break;


    controlla(...) ha uno switch che verifica secondo l'Id del controllo

    per verificare il funzionamento lo switch manda dei messagebox ecco COSA NON VA:

    1) se passo al campo successivo mi da un avviso per ben due volte (due messaggi) che è sul nuovo campo
    2) e poi un terzo messaggio che ha lasciato il campo precedente
    3) dopo di che il cursore è sul campo successivo

    mi illuminate ????

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    secondo me il problema non sta nell'intercettare EN_KILLFOCUS, questo va benissimo, il problema è nella gestione del
    keyboard focus e caret, nel dettaglio ecco cosa succede:

    premesso che lo switch ha lo scopo avvisare se introdotti valori errati nei campi, quindi ogni campo è gestito da relativo
    case:

    se dal 2° campo passo al 3° campo succede questo:

    1. messaggio dal 3° campo (Errato 3° valore)
    2. altro messaggio dal 3° campo dovuto al fatto che il campo non ha + il keyboard focus per il precedente messaggio di avviso
    3. messaggio che il 2° campo aveva il valore errato

    come evito questo? o come va gestito correttamente?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.