0

有没有办法在派生的 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 事件也得到了相同的结果。还有其他方法可以获取方向键吗?

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

4

1 回答 1

1

您的示例代码似乎错误。OnChar应该打电话CRichEditCtrl::OnChar。我猜你是在你的真实代码中做到这一点的。

无论如何,OnKeyDown这就是您要查找的内容(箭头键不是字符)。因此,添加ON_WM_KEYDOWN()到您的消息映射并覆盖OnKeyDown. 寻找例如VK_LEFTVK_RIGHT

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

CPoint pt = GetCaretPos();
int wordLocation = CharFromPos(pt);
于 2012-10-14T17:07:29.537 回答