こんにちは。秀水です。
ダイアログに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
int nStartChar;
int nEndChar;
m_edt.GetSel(nStartChar, nEndChar);
~
m_edt.SetSel(nStartChar, nEndChar);
でどうでしょう?
ku殿 助言ありがとうございます。
実は、
(最初の発言で記載しておけばよかったのですね ^^;)
最初は
DWORD dwSel = m_edt.GetSel();
m_edt.SetWindowText(str);
m_edt.SetSel(dwSel);
として、カーソルを移動しようと考えたんです。
が、これですと カーソルの移動だと思うので
例えばカーソルは先頭にあり、
スクロールは最後尾にある(後ろのデータ表示中)とすると
先頭データの表示になってしまうんです。
(更新前スクロール位置のデータ(後ろのデータ)を表示したい。)
そこで SetScrollPos を使用するのかしら?
と思い調べ始めたのですが、スクロールは移動しても
データが移動しないというところで壁にぶつかってしまいました。
EN_VSCROLL になにか処理が必要なのでしょうか?
GetFirstVisibleLine()とLineScroll()を使ってみてはどうでしょうか?
CEdit::SetSel()の最後の(デフォルトの)引数は...?
n殿
> CEdit::SetSel()の最後の(デフォルトの)引数は...?
bNoScrollの指定は省略(bNoScroll = FALSE)です。
ku殿
int nLine = m_edt.GetFirstVisibleLine();
m_edt.SetWindowText(str);
m_edt.LineScroll(nLine);
で、思うように動作するようになりました。
ありがとうございました。