我正在使用 mfc 的 cedit 控件制作类似 matlab 的命令窗口。
例如,在我输入几个命令后,我想使用箭头键(特别是向上键)显示旧命令。
我成功地显示了旧命令,但未能将光标定位在该命令的末尾。原因似乎是在我将光标定位在该命令的末尾后又输入了一次箭头键。
这里是详细情况。
- 首先我输入命令'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
。有人对此有任何想法吗?