リストビューで任意の範囲を表示するには

解決


クンタキンテ  2006-03-05 23:28:59  No: 60877

リストビューのサイズより表のほうが大きく、スクロールバーが出ている状態で、
任意の行を表示させるのは、EnsureVisibleでできるのですが、
任意のカラムを表示させる方法が分かりません。

ご指導をお願いします。

winxp  .net  mfc  です。


クンタキンテ  2006-03-06 00:44:59  No: 60878

申し訳ありません。

言葉不足でした。

リストビューで、上下左右ともにスクロールバーが出ている状態で、再描画した時に、前と同じ領域を表示させることを考えました。

上下については、GetTopIndex と EnsureVisible でできるのですが、左右方向をどうしたらいいのか分かりません。

ネットをくぐると、EnsureVisible で横位置も指定できるようなことを書いたサイトがあるのですが、具体的なコードはありません。
MSDNでも見つけることができません。
また、現在表示されている列番号を取得する方法も、見つかりません。

お手数ですが、ご指導をお願いします。


RAPT  2006-03-06 07:13:25  No: 60879

ScrollWindowEx()あたり?


クンタキンテ  2006-03-07 15:08:08  No: 60880

ありがとうございます。

現在、モニター上に表示されている範囲を取得する方法はありますでしょうか。
行は、GetTopIndex で一番上の行を取得できるので逆算できますが、列をどのように取得したらいいのか分かりません。

また、MSDNを見ると、ScrollWindowEx()のスクロール量は、デバイス単位となっています。
印刷の場合、プリンタごとに「デバイス」の大きさが違って、印刷のサイズが変わってしまう、ということがあると思うのですが、モニターに表示させるだけの場合には、PCごとに見え方が違う、というようなことは起こりますでしょうか。

申し訳ありませんが、よろしくお願いいたします。


dairygoods  2006-03-07 23:27:51  No: 60881

HitTest()で四隅にあるセルを調べれば大体分かりそうです。

部分的かどうかまで判定するなら、GetColumnWidth()で得られる列幅情報と、
横スクロール量から計算する必要があるでしょう。

> モニターに表示させるだけの場合には、PCごとに見え方が違う、
> というようなことは起こりますでしょうか。

ディスプレイもいろんな大きさがありますし、
プロパティでDPIを変更できますから、
PCごとに見え方が違うでしょう。

ですが、ディスプレイの場合は紙と違って、
実際に表示される長さに注目することは稀なので、
気にしなくてよいと思います。


クンタキンテ  2006-03-08 20:44:34  No: 60882

ありがとうございます。

まだよく分かっていないのですが、HitTest()で列を取得できるのでしょうか。
戻り値は、行のインデックスだと思うのです。

MSDNを読んでみたのですが、よく分かりません。

リストビューのサイズは分かっているので、表の一番左か右の列が何列目か分かれば、計算できるのですが、それが分かりません。

よろしくお願いいたします。


dairygoods  2006-03-09 01:05:40  No: 60883

試していないのですが、LVHITTESTINFO を引数に取る方を使ったら
iSubItem メンバに取得できませんか?
メンバ一覧をよく見てみると、SubItemHitTest というのもありますね。


クンタキンテ  2006-03-10 01:36:55  No: 60884

たいへんありがとうございました。

SubItemHitTestとScroll()で、目的を達しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加