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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top