CEditでスクロール位置の保持 – プログラミング – Home

CEditでスクロール位置の保持
 
通知
すべてクリア

[解決済] CEditでスクロール位置の保持


秀水
 秀水
(@秀水)
ゲスト
結合: 21年前
投稿: 14
Topic starter  

こんにちは。秀水です。

ダイアログにEditボックス(マルチライン エディット コントロール)を置いて
そのEditボックスのデータをタイマを使用して周期更新しています。

タイマ処理内で、
m_edt.SetWindowText(str);
とデータ更新しているのですが
この動作でカーソル(スクロール)が先頭に移動してしまうことを
回避できずに悩んでいます。

更新前のスクロールの位置を保持したいのですが。

int nPos = m_edt.GetScrollPos(SB_VERT);
m_edt.SetWindowText(str);
m_edt.SetScrollPos(SB_VERT, nPos);

としたのですが、スクロールバーの位置は移動しても
データがスクロールしません。
それで
ScrollWindow
を使用すればいいのかしら?と思ったんですが
どうも正しく使用することができないでいます。

すみませんがどなたかアドバイス頂けないでしょうか
宜しくお願いします。

[動作環境] Win2000 VC++6.0 MFC


引用未解決
トピックタグ
ku
 ku
(@ku)
ゲスト
結合: 22年前
投稿: 312
 

int nStartChar;
int nEndChar;
m_edt.GetSel(nStartChar, nEndChar);

m_edt.SetSel(nStartChar, nEndChar);

でどうでしょう?


返信引用
秀水
 秀水
(@秀水)
ゲスト
結合: 21年前
投稿: 14
Topic starter  

ku殿 助言ありがとうございます。

実は、
(最初の発言で記載しておけばよかったのですね ^^;)
最初は

DWORD dwSel = m_edt.GetSel();
m_edt.SetWindowText(str);
m_edt.SetSel(dwSel);

として、カーソルを移動しようと考えたんです。

が、これですと カーソルの移動だと思うので
例えばカーソルは先頭にあり、
スクロールは最後尾にある(後ろのデータ表示中)とすると

先頭データの表示になってしまうんです。
(更新前スクロール位置のデータ(後ろのデータ)を表示したい。)

そこで SetScrollPos を使用するのかしら?
と思い調べ始めたのですが、スクロールは移動しても
データが移動しないというところで壁にぶつかってしまいました。

EN_VSCROLL になにか処理が必要なのでしょうか?


返信引用
ku
 ku
(@ku)
ゲスト
結合: 22年前
投稿: 312
 

GetFirstVisibleLine()とLineScroll()を使ってみてはどうでしょうか?


返信引用
n
 n
(@n)
ゲスト
結合: 20年前
投稿: 159
 

CEdit::SetSel()の最後の(デフォルトの)引数は...?


返信引用
秀水
 秀水
(@秀水)
ゲスト
結合: 21年前
投稿: 14
Topic starter  

n殿

> CEdit::SetSel()の最後の(デフォルトの)引数は...?

bNoScrollの指定は省略(bNoScroll = FALSE)です。

ku殿

int nLine = m_edt.GetFirstVisibleLine();
m_edt.SetWindowText(str);
m_edt.LineScroll(nLine);

で、思うように動作するようになりました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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