处理mfc的cedit控制中的箭头键

时间:2013-12-26 06:32:37

标签: mfc keyboard cedit

我正在使用mfc的cedit控制制作类似matlab的命令窗口。

例如,在我输入几个命令后,我想使用箭头键(特别是向上键)显示旧命令。

我成功显示了旧命令,但未能将光标定位在此命令的末尾。 原因似乎是在我在此命令的末尾找到光标后再次输入箭头键。

以下是详细情况。

  • 首先我输入命令' play'
  • 然后弹出Play!..消息。
  • 并在下一个命令提示符中点击'↑'键
  • 我接替了旧命令' play'自动流式传输,

但是,我的光标上升到了上一行。

  

@ play

     

玩!.. | (←光标位于此处..)

     

@ play | (←我想在点击'↑'键)

后找到光标

这是我的代码:

class CEditCommand::CEdit
{
public:
    virtual BOOL PreTranslateMessage(MSG* pMsg);
}

BOOL CEditCommand::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_KEYDOWN)
    {
        if (pMsg->wParam == VK_UP)
        {
            int nS = 0; nE =0;
            GetSel(nS, nE);
            int nLineIndex = LineIndex();
            CString str = m_CommandHistory[m_nCommandIndex];
            m_nCommandIndex--;
            SetSel(nLineIndex, nE);
            ReplaceSel(str);
            SetSel(0, -1);
            SetSel(-1, -1);
        }
    }
}

我不知道为什么'↑'执行PreTranslateMessage后,将再次按下该键。 有没有人对此有所了解?

1 个答案:

答案 0 :(得分:2)

您的编辑控件仍会显示向上箭头消息,因此当CEditCommand::PreTranslateMessage() WM_KEYDOWN和WM_KEYUP的{​​{1}}中返回TRUE。 >