Поле редактирования MFC - несколько символов на нажатие клавиши - PullRequest
1 голос
/ 17 декабря 2008

Я пытаюсь создать простой диалог в MFC с использованием Visual C ++. Моя проблема в том, что когда я получаю диалоговое окно на экране и пытаюсь ввести в поле «Редактировать поле», если я набираю букву «а» один раз, она появляется в поле редактирования как «aaaaaaaaaaa» (это 12 а). Кроме того, если я пытаюсь перемещаться по полю с помощью клавиш со стрелками, карат перемещается по 12 символов за раз.

Это не просто ошибка отображения, так как вывод из поля ввода по-прежнему "aaaaaaaaaaaa".

Я бы отправил код, но на самом деле его нет. Я добавил окно редактирования с помощью панели инструментов в Visual Studio и назначил ему переменную в своем классе, чтобы это не было каким-либо специальным окном редактирования.

Если у кого-то есть мысли о том, что может произойти, это будет с благодарностью. К сожалению, я не знаю с чего начать.

Спасибо как всегда.

Ответы [ 5 ]

1 голос
/ 08 января 2009

Чтобы отладить это, добавьте функцию PreTranslateMessage в ваш диалог и посмотрите, сколько раз обработано нажатие клавиши.

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);
}
0 голосов
/ 29 декабря 2009

Я установил пакет обновления 2 в моей ОС WinXp 64, и проблема была решена для меня:)

0 голосов
/ 03 января 2009

Захватываете ли вы какие-либо события, такие как WM_KEYUP, в функции PreTranslateMessage () или где-либо еще в вашем приложении?

Если вы переопределили обработку по умолчанию для событий клавиатуры, это может вызвать симптомы, которые вы видите.

0 голосов
/ 05 января 2009

Это происходит для нового проекта, или вы можете воссоздать эту проблему в новом проекте? Это поможет понять, что вы сделали в своем коде или в вашей установке.

0 голосов
/ 28 декабря 2008

По некоторым причинам это возвращает смутные воспоминания о ранней борьбе с MFC. Вы вообще искали взаимную рекурсию? Я навсегда делал что-то в одном бите приложения, которое отправило сообщение (без моего ведома), которое было подхвачено другим методом, который вызвал первый метод ...

Полагаю, это один из тех, кто бьет по лбу; это дает мне ноющее чувство дежавю, которое я не могу сделать конкретным.

Если это взаимная рекурсия, вы сможете увидеть ее в стеке вызовов, если сможете найти подходящее место для точки останова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...