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()して、をオーバーライドしますOnKeyDownVK_LEFTたとえば、を探しVK_RIGHTます。

しかし...あなたのアプローチは間違っています。必要なのはCharFromPosです:

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