Pergunta

Eu estou tentando criar um diálogo simples no MFC usando Visual C ++. Meu problema é que quando eu chegar a caixa de diálogo na tela e tentar digitar em um campo Edit Box, se eu digitar a letra 'a' uma vez, ele aparece na caixa de edição como 'aaaaaaaaaaa' (que é 12 um do). Além disso, se eu tentar navegar na caixa usando as teclas de seta, o quilate move 12 caracteres de uma vez.

Não é apenas um erro de exibição, como a saída do editbox ainda é "aaaaaaaaaaaa".

Eu ia postar o código, mas não há realmente nenhuma para postar. Eu adicionei a caixa de edição usando a caixa de ferramentas no Visual Studio e atribuído uma variável para isso na minha aula de modo que este não é qualquer tipo de caixa de edição especial.

Se alguém tem alguma opinião a respeito do que pode estar acontecendo isso seria muito apreciado. Infelizmente, eu não sei por onde começar.

Obrigado como sempre.

Foi útil?

Solução

Você está capturando todos os eventos como WM_KEYUP em sua PreTranslateMessage () ou em qualquer outro lugar em seu aplicativo?

Se você tiver substituído o manuseio de eventos de teclado padrão, ele pode causar os sintomas que você está vendo.

Outras dicas

Para depurar isso, adicionar a função PreTranslateMessage para o seu diálogo, e ver exatamente quantas vezes o keydown está sendo processado.

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

Por alguma razão isso traz de volta memórias vagas de lutas iniciais com MFC. Você já olhou para recursão mútua em tudo? Fiquei sempre fazer algo em um pouco do aplicativo que enviou uma mensagem (sem o conhecimento me) que foi apanhada por um outro método que chamou o primeiro método ...

Meu palpite é que é um daqueles bater os testa; dá-me dessa sensação persistente de déjà vu que eu não posso fazer o concreto.

Se é recursão mútua você deve ser capaz de vê-lo na pilha de chamadas, se você pode encontrar o lugar certo para um ponto de ruptura.

Isso está acontecendo para um projeto fresco, ou você pode recriar esse problema em um projeto fresco? Ele vai ajudar a discernir se é algo que você fez no seu código, ou a sua instalação.

Eu instalei o Service Pack 2 no meu WinXp 64 OS e o problema ficar resolvido para mim:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top