2011-09-29 45 views
10

私はリストをクリアして特定の時間に再投入するCListCtrl(レポートスタイル)を持っています。私はこれを行うときに垂直スクロール位置を維持したいと思います。私はGetScrollPos()してからSetScrollPosをしようとしている()は、それが動作していないと思われるCListCtrl:スクロール位置を維持する方法は?

EnsureVisible() 
GetScrollPos() 
SetScrollPos() 
GetScrollInfo() 
GetTopIndex() 
Scroll() 

:私は有望に見えるカップルの方法がある参照してください。スクロール位置を保存して後で復元する単純な正しい方法は何ですか?

UPDATE

は実際にそれを復元するために、私は(スクロール位置GetScrollPosを保存するために取得することができそうです)、その後SetScrollPos()、しかし、文字通り、スクロールバーの位置を設定しているようだと、実際にスクロールしません私のCListCtrlの項目。

UPDATE 2

スクロール()メソッドは、正しくスクロールバー内容をスクロールするようです。しかし、引数としてCSizeオブジェクトが必要です。したがって、問題は、CSizeとGetTopIndexまたはGetScrollInfo/Posの出力の間で変換する方法です。

答えて

16

私はそれを過去に行っています。 IIRCのトリックは、

int topIndex= m_List.GetTopIndex(); 
RenewContents(); 
m_List.EnsureVisible(m_List.GetItemCount() - 1); // Scroll down to the bottom 
m_List.EnsureVisible(topIndex);// scroll back up just enough to show said item on top 
+0

で構成されています。私は、スクロール()を使用してソリューションを好むが、これは仕事をします。 nTopIndexの項目が少ないリストの内容を更新した後に何が起こったらどうしたらいいですか? – User

+0

EnsureVisible(nTopIndex)は効果がないと思います。あなたはリストを下にスクロールダウンして終了します。 –

+1

そして、なぜM $はSetTopIndexメソッドを提供するのに気にしませんでしたか? :-( –

関連する問題