CEditViewでカーソル操作

[戻る]
kayo 2005/03/24(木) 11:42:23
Windows XP 
VC++ 6.0

SDIでCEditViewを派生したCHensyuViewというビューを作りました。
キーボードの矢印キーを押した時にカーソルを移動させるのは
下の命令でできました。しかし、画面を最大化又は最小化すると
カーソルが一番最後に移ってしまいます。
最大、最小化してもカーソルが一番最後に移動しないようにしたいのですが、
原因がわかりません。
また、矢印キーを押してカーソルが移動した後、
文字を入力しても、同じように最後に入力されてしまいます。
どなたかご教授お願い致します。

カーソルを右又は左に移動する↓↓
void CHensyuView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    CPoint point;
    const imovepoint = 8;

    // カーソル位置取得
    point = GetEditCtrl().GetCaretPos();
    
    switch(nChar){
        case VK_RIGHT:
            // カーソルを右へ移動
            point.x = point.x + imovepoint;
            break;
        case VK_LEFT:
            // カーソルを左へ移動
            point.x = point.x - imovepoint;
            break;
    }
    // カーソルをセットする
    GetEditCtrl().SetCaretPos(point);
}

カーソルのある場所に入力↓↓
void CHensyuView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    int ibyte;
    int iSelStart;
    int iSelEnd;
    char cworkdata[1];

    // 文字に変換
    ibyte = sprintf(cworkdata,"%c",nChar);
    // 現在のカーソル位置取得
    GetEditCtrl().GetSel(iSelStart,iSelEnd);
    GetEditCtrl().SetSel(iSelStart,iSelStart);
    // カーソルのある場所に入力
    GetEditCtrl().ReplaceSel(cworkdata);
}

dairygoods 2005/03/24(木) 12:10:45
SetCaretPos() は、点滅しているカーソルマーク
そのものの位置を変更するものであって、
エディットコントロール自身が、
「俺は今ここにカーソルを表示している」と
記憶している挿入位置は変更されません。

SetCaretPos() ではなく、
SetSel() を使ってみてください。

kayo 2005/03/24(木) 12:59:17
[[解決]]
dairygoods さん
回答ありがとうございます。

SetCaretPos() ではなく、
SetSel()でカーソル制御をしてみたところ、
指定したところにカーソルが移動されるように
なりました。
ありがとうございました。

古いスレッドには追加発言できません。