リストビューのサイズより表のほうが大きく、スクロールバーが出ている状態で、
任意の行を表示させるのは、EnsureVisibleでできるのですが、
任意のカラムを表示させる方法が分かりません。
ご指導をお願いします。
winxp .net mfc です。
申し訳ありません。
言葉不足でした。
リストビューで、上下左右ともにスクロールバーが出ている状態で、再描画した時に、前と同じ領域を表示させることを考えました。
上下については、GetTopIndex と EnsureVisible でできるのですが、左右方向をどうしたらいいのか分かりません。
ネットをくぐると、EnsureVisible で横位置も指定できるようなことを書いたサイトがあるのですが、具体的なコードはありません。
MSDNでも見つけることができません。
また、現在表示されている列番号を取得する方法も、見つかりません。
お手数ですが、ご指導をお願いします。
ScrollWindowEx()あたり?
ありがとうございます。
現在、モニター上に表示されている範囲を取得する方法はありますでしょうか。
行は、GetTopIndex で一番上の行を取得できるので逆算できますが、列をどのように取得したらいいのか分かりません。
また、MSDNを見ると、ScrollWindowEx()のスクロール量は、デバイス単位となっています。
印刷の場合、プリンタごとに「デバイス」の大きさが違って、印刷のサイズが変わってしまう、ということがあると思うのですが、モニターに表示させるだけの場合には、PCごとに見え方が違う、というようなことは起こりますでしょうか。
申し訳ありませんが、よろしくお願いいたします。
HitTest()で四隅にあるセルを調べれば大体分かりそうです。
部分的かどうかまで判定するなら、GetColumnWidth()で得られる列幅情報と、
横スクロール量から計算する必要があるでしょう。
> モニターに表示させるだけの場合には、PCごとに見え方が違う、
> というようなことは起こりますでしょうか。
ディスプレイもいろんな大きさがありますし、
プロパティでDPIを変更できますから、
PCごとに見え方が違うでしょう。
ですが、ディスプレイの場合は紙と違って、
実際に表示される長さに注目することは稀なので、
気にしなくてよいと思います。
ありがとうございます。
まだよく分かっていないのですが、HitTest()で列を取得できるのでしょうか。
戻り値は、行のインデックスだと思うのです。
MSDNを読んでみたのですが、よく分かりません。
リストビューのサイズは分かっているので、表の一番左か右の列が何列目か分かれば、計算できるのですが、それが分かりません。
よろしくお願いいたします。
試していないのですが、LVHITTESTINFO を引数に取る方を使ったら
iSubItem メンバに取得できませんか?
メンバ一覧をよく見てみると、SubItemHitTest というのもありますね。
たいへんありがとうございました。
SubItemHitTestとScroll()で、目的を達しました。
ツイート | ![]() |