MFC Edit Box - Più Caratteri per battitura?
-
21-08-2019 - |
Domanda
Sto cercando di creare un semplice dialogo in MFC utilizzando Visual C ++. Il mio problema è che quando ho la finestra di dialogo sullo schermo e provare a digitare in un campo Edit Box, se digito la lettera 'a' una volta, appare nella casella di modifica come 'aaaaaaaaaaa' (che è 12 una di). Inoltre, se provo a navigare nella casella utilizzando i tasti freccia, il carato si muove 12 caratteri alla volta.
Non è solo un errore di visualizzazione, come l'uscita dal editbox è ancora "aaaaaaaaaaaa".
I avrei posto il codice, ma non c'è davvero nessuno a postare messaggi. Ho aggiunto la casella di modifica utilizzando la casella degli strumenti di Visual Studio e assegnato una variabile ad esso nella mia classe, quindi questo non è un qualsiasi tipo di speciale casella di modifica.
Se qualcuno ha qualche idea su ciò che potrebbe accadere sarebbe molto apprezzato. Purtroppo, non so da dove cominciare.
Grazie come sempre.
Soluzione
Stai catturando tutti gli eventi, come WM_KEYUP nella funzione () PreTranslateMessage o in qualsiasi altro nella vostra app?
Se avete sovrascritto le trattamento per eventi della tastiera di default, esso potrebbe causare i sintomi che state vedendo.
Altri suggerimenti
Per eseguire il debug, aggiungere la funzione PreTranslateMessage alla finestra, e vedere esattamente quante volte la keydown è in elaborazione.
BOOL DialogName::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN)
{
// TODO: see what is going on here
return TRUE; //do not dispatch this message, so keydown will have no effect
}
return CDialog::PreTranslateMessage(pMsg);
}
Per qualche motivo questo riporta vaghi ricordi di prime lotte con MFC. Hai guardato per il mutuo ricorsione a tutti? Ero sempre fare qualcosa in un po 'di app che ha inviato un messaggio (a mia insaputa) che è stato preso da un altro metodo che ha chiamato il primo metodo ...
La mia ipotesi è che è uno di quelli schiaffo quelle della fronte; mi dà questo fastidioso senso di déjà vu che non riesco a concretizzare.
Se è reciproca ricorsione si dovrebbe essere in grado di vederlo nello stack di chiamate, se si può trovare il posto giusto per un punto di interruzione.
E 'questo accada per un progetto fresco, o si può ricreare questo problema in un nuovo progetto? Vi aiuterà a discernere se si tratta di qualcosa che hai fatto nel codice, o la vostra installazione.
Ho installato il Service Pack 2 nel mio WinXp 64 OS e il problema vengono risolti per me:)