CRichEditCtrl和箭头键

时间:2012-10-11 19:34:33

标签: c++ mfc

有没有办法在派生的CRichEditCtrl类中捕获箭头键?我请求所有密钥并捕获OnGetCode()和OnChar()命令。

UINT MyRichEditCtrl::OnGetDlgCode()
{
   return CRichEditCtrl::OnGetDlgCode() | DLGC_WANTALLKEYS;
}

void MyRichEditCtrl::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
   CRichEditCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
   ...    
}

我在消息地图中匹配它们。

BEGIN_MESSAGE_MAP(MyRichEditCtrl, CRichEditCtrl)
   ON_WM_CHAR()
   ON_WM_GETDLGCODE()
END_MESSAGE_MAP()

我获得了大多数键,但没有箭头键。我也得到了与OnKeyDown和OnKeyUp事件相同的结果。是否有其他方法来获得箭头键?

具体来说,我很想知道当前光标位置的字符是否是括号。用户可以通过键入字符,使用鼠标单击编辑控件中的某个位置或使用箭头键移动光标位置来更改光标位置。我在想是否可以检测到箭头键,然后我可以看出光标是否在括号中。

1 个答案:

答案 0 :(得分:1)

您的示例代码似乎有误。 OnChar应致电CRichEditCtrl::OnChar。我想你是在真实的代码中做到的。

无论如何,OnKeyDown正是您要找的(箭头键不是字符)。因此,请在邮件地图中添加ON_WM_KEYDOWN()并覆盖OnKeyDown。寻找例如VK_LEFTVK_RIGHT

但是......你的做法是错误的。你需要的是CharFromPos

CPoint pt = GetCaretPos();
int wordLocation = CharFromPos(pt);