1

我正在尝试使用 Visual C++ 在 MFC 中创建一个简单的对话框。我的问题是,当我在屏幕上看到对话框并尝试输入编辑框字段时,如果我输入字母“a”一次,它在编辑框中显示为“aaaaaaaaaaaa”(即 12 a)。此外,如果我尝试使用箭头键在框中导航,克拉一次移动 12 个字符。

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

我会发布代码,但实际上没有可发布的。我使用 Visual Studio 中的工具箱添加了编辑框,并在我的类中为其分配了一个变量,因此这不是任何类型的特殊编辑框。

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

一如既往地感谢。

4

5 回答 5

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);
}
于 2009-01-08T00:37:33.360 回答
0

出于某种原因,这让人们想起了早期与 MFC 斗争的模糊记忆。你有没有寻找过相互递归?我永远在应用程序的某个位中做某事,该应用程序发送了一条消息(我不知道),该消息被称为第一种方法的另一种方法接收...

我的猜测是,它是那些打额头的人之一。它给了我一种我无法具体化的似曾相识的唠叨感。

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

于 2008-12-27T21:01:50.173 回答
0

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

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

于 2009-01-02T23:29:43.840 回答
0

这是否发生在新项目中,或者您可以在新项目中重新创建此问题?这将有助于辨别它是您在代码中完成的,还是您的安装。

于 2009-01-05T16:05:20.070 回答
0

我在我的 WinXp 64 操作系统中安装了 service pack 2,我的问题得到了解决:)

于 2009-12-29T13:45:21.270 回答