在 mfc 的 cedit 控制中处理箭头键
Posted
技术标签:
【中文标题】在 mfc 的 cedit 控制中处理箭头键【英文标题】:Handling arrow key in cedit control of mfc 【发布时间】:2013-12-26 06:32:36 【问题描述】:我正在使用 mfc 的 cedit 控件制作类似 matlab 的命令窗口。
例如,在我输入几个命令后,我想使用箭头键(特别是向上键)显示旧命令。
我成功显示旧命令,但未能将光标定位在该命令的末尾。 原因似乎是我将光标定位在该命令的末尾后又输入了一次箭头键。
这里是详细情况。
首先我输入命令“播放” 然后播放!...消息弹出。 然后在下一个命令提示符中,我点击了“↑”键 我成功地使用了自动流式传输的旧命令“播放”,但是,我的光标向上移动了。
@播放
播放!.. | (←光标位于此处..)
@播放| (←我想把光标定位到这里,点击'↑'键后)
这是我的代码:
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】:您的编辑控件仍会收到向上箭头消息,因此当pMsg->wParam == VK_UP
时,您需要在CEditCommand::PreTranslateMessage()
中为WM_KEYDOWN
和WM_KEYUP
返回TRUE
【讨论】:
感谢您的帮助。解决方案真的很简单。以上是关于在 mfc 的 cedit 控制中处理箭头键的主要内容,如果未能解决你的问题,请参考以下文章
为啥 UpdateData() 在 MFC CEdit 控件的 EN_CHANGE 处理程序中不起作用