CEditViewでカーソル操作 – プログラミング – Home

通知
すべてクリア

[解決済] CEditViewでカーソル操作


kayo
 kayo
(@kayo)
ゲスト
結合: 20年前
投稿: 6
Topic starter  

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
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

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

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


返信引用
kayo
 kayo
(@kayo)
ゲスト
結合: 20年前
投稿: 6
Topic starter  

dairygoods さん
回答ありがとうございます。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました