2012-10-11 205 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);