2012-10-11 144 views
0

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

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

你的示例代码看起来不对。 OnChar应该叫CRichEditCtrl::OnChar。我想你在你的真实代码中这样做。

无论如何,OnKeyDown是你在找什么(箭头键不是字符)。因此,将ON_WM_KEYDOWN()添加到您的消息映射并覆盖OnKeyDown。寻找例如和。

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

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