• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MFCのCListCtrlでスクロールを検出)

MFCのCListCtrlでスクロールを検出

このQ&Aのポイント
  • MFCのダイアログアプリでレポートスタイルのリストコントロールを使用し、スクロールを検出したい
  • 最初に始めの100行を表示し、ユーザーがスクロールバーを一番下まで移動させるたびに次の100行を追加挿入して表示させたい
  • LVN_BEGINSCROLL、LVN_ENDSCROLLなどのイベントハンドラを使用してスクロールバーを動かしてもイベントが呼ばれない

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>それっぽいLVN_BEGINSCROLL、LVN_ENDSCROLLなどのイベントハンドラを http://msdn.microsoft.com/en-us/library/bb774802%28v=vs.85%29.aspx ビジュアルスタイルを有効にしていたり、マニュフェストファイルの設定が必要だったりする…んですかね? CListCtrlを継承したクラスを作成して、そのクラスのメッセージハンドラにWM_VSCROLLを追加…というのでどうでしょう? # コントロール変数は作成したクラスの変数…ということになります。 スクロールバーを操作したときにOnVScroll()がコールされます。 スクロールバーのどの位置にあるのか…というのは入ってきませんので… GetScrollInfo()辺りで情報を取得…でしょうか。 SB_ENDSCROLLの時…ですかね…。スクロールバーのボタン押されたままだとどうなるか微妙? クライアントのサイズなどを取得して(CListCtrlのクライアントの左下辺りの座標で)CListCtrl::HitTest()で確認…というのは邪道ですかねぇ。 取得したアイテムのインデックスが最終インデックスまたは-1の時に最下段までスクロールした…とか。 # ちなみに、使用しているVSのバージョン、またはMFCのバージョンも明記した方が良い…かと思われます。 # 上記(OnVScroll())のはVS2005にて確認…です。 >いきなり1000行は多すぎるので スレッドを作成して、そっちでアイテムを追加していく…というのもアリでしょう。 同期処理はちょっと手間かも知れませんが。 # ファイルが沢山あるディレクトリをエクスプローラで開いたときに、適度に追加されていく…ということがあります。

tsuruharu
質問者

お礼

言われたとおり、CListCtrlの派生クラスを作ってそのイベントハンドラで VSCROOLイベントを拾うことができました。 また、そこでGetScrollPos()とGetScrollLimit()を使って、 スクロールバーの最下位置を検出することができました。 無事解決しました。迅速な回答ありがとうございました。

関連するQ&A

専門家に質問してみよう