2008-12-16 23 views
1

我想在MFC中使用Visual C++创建一个简单的对话框。我的问题是,当我在屏幕上获得对话框并尝试输入编辑框字段时,如果我输入一次字母'a',它会在编辑框中显示为'aaaaaaaaaaa'(即12 a)。此外,如果我尝试使用箭头键在框中四处移动,则克拉每次移动12个字符。MFC编辑框 - 每个击键多个字符?

这不仅仅是一个显示错误,因为编辑框的输出仍然是“aaaaaaaaaaaa”。

我会发布代码,但真的没有发布。我使用Visual Studio中的工具箱添加了编辑框,并在我的类中为它分配了一个变量,所以这不是任何特殊的编辑框。

如果任何人有任何想法可能会发生什么,将不胜感激。不幸的是,我不知道从哪里开始。

一如既往的感谢。

+0

你肯定有一个与它的ID没有代码?关键关机事件如何?你的目标是什么操作系统?如果添加另一个编辑框,它是否也会发生? – baash05 2008-12-17 20:02:53

回答

0

您是否在您的PreTranslateMessage()函数或应用程序中的其他任何位置捕获任何事件,如WM_KEYUP?

如果您重写了键盘事件的默认处理,则可能会导致您看到的症状。

0

出于某种原因,这带回了早期与MFC斗争的模糊记忆。你有没有寻找过相互递归?我永远在发送了被调用的第一个方法的另一种方法拿起消息(未知对我)的应用程序的一个位的东西...

我的猜测是它的其中之一咂了额头的;它给了我这种似曾相识的感觉,我不能具体化。

如果它是相互递归的,你应该能够在调用堆栈中看到它,如果你能找到一个断点的正确位置。

0

这是发生在一个新项目上,还是可以在新项目中重新创建这个问题? 它会帮助您辨别您的代码或安装是否已完成。

1

要调试此操作,请将PreTranslateMessage函数添加到您的对话框中,并准确查看keydown正在处理的次数。

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

我在WinXp下64 OS安装Service Pack 2,问题得到解决,我:)