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);
}
SetCaretPos() は、点滅しているカーソルマーク
そのものの位置を変更するものであって、
エディットコントロール自身が、
「俺は今ここにカーソルを表示している」と
記憶している挿入位置は変更されません。
SetCaretPos() ではなく、
SetSel() を使ってみてください。
dairygoods さん
回答ありがとうございます。
SetCaretPos() ではなく、
SetSel()でカーソル制御をしてみたところ、
指定したところにカーソルが移動されるように
なりました。
ありがとうございました。