リストビューコントロールを使ってます。あるリストの内容が変更された場合に、
EnsureVisible()で表示させているのですが、枠内にあるのにも関わらず
必ず最下行に持ってかれてしまいます。
1 AAAAA
=======================
2 BBBBB
3 CCCCC
4 DDDDD←ここにカーソルがある状態でEnsureVisible()すると
5 EEEEE
=======================
6 FFFFF
↓こうなる
=======================
1 AAAAA
2 BBBBB
3 CCCCC
4 DDDDD←選択状態になる。
=======================
5 EEEEE
6 FFFFF
MSDNを見ると・・・
>少なくとも一部が可視になるようにします。必要に応じてリスト ビュー コントロールは
>スクロールされます。引数 bPartialOK が 0 以外でアイテムの一部だけが可視になって
>いるときは、スクロールされません。
とありますが、この「一部」と言うのは何を指しているのでしょうか?
単純に画面上にあれば「可視」と言うのではと思うのですが。
ソースは、「m_ListScn.EnsureVisible(No - 1, TRUE);」としています。
VC6.0MFCを使っております。宜しくお願いします。
> この「一部」と言うのは何を指しているのでしょうか?
例えば、DDDDD の上半分、とか。
> m_ListScn.EnsureVisible(No - 1, TRUE);
No とは?
DDDDD のリストビューアイテムインデックスは本当に No - 1 と合致しますか?
お返事遅くてすみません。
>No とは?
>DDDDD のリストビューアイテムインデックスは本当に No - 1 と合致しますか?
↓こういうことです。説明足らずですみません。
No Data
=======================
1 AAAAA
2 BBBBB
3 CCCCC
4 DDDDD←選択状態になる。
=======================
5 EEEEE
インデックスはあってます。
いや、だから、Noの値はどのタイミングでどのようにして取得していますか?
ってことです。そのリストコントロールで、ソートありの場合、Insert時に
返ってくるインデックスと、ソートされて表示されたときに見える実際の
インデックスとの値が異なる場合があるのですが、そこは大丈夫でしょうか。
個人的には、結局、見えているのだから、別に拘らなくてもいいのでは
ないかと思うのですが、GetTopIndex()とGetCountPerPage()で計算される、
表示されているはずのアイテムインデックスであれば、EnsureVisible()を
行なわない、といった代替策も考えられますね。