![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
MFCのダイアログアプリを作成しています。
レポートスタイルのリストコントロールを配置して、全部で1000行のアイテム
を表示させたいのですが、いきなり1000行は多すぎるので最初に始めの100行分
だけ表示して、ユーザーがスクロールバーを一番下まで移動させるたびに
次の100行を追加挿入していって表示させるようにしたいと思っています。
そこでまずはユーザーがスクロールバーを一番下まで移動させたタイミングを
イベントで拾おうと思ったのですが、それっぽいLVN_BEGINSCROLL、
LVN_ENDSCROLLなどのイベントハンドラを作成してスクロールバーを
動かしてもうまく呼ばれません。どうすればいいかご教示ください
No.1ベストアンサー
- 回答日時:
>それっぽいLVN_BEGINSCROLL、LVN_ENDSCROLLなどのイベントハンドラを
http://msdn.microsoft.com/en-us/library/bb774802 …
ビジュアルスタイルを有効にしていたり、マニュフェストファイルの設定が必要だったりする…んですかね?
CListCtrlを継承したクラスを作成して、そのクラスのメッセージハンドラにWM_VSCROLLを追加…というのでどうでしょう?
# コントロール変数は作成したクラスの変数…ということになります。
スクロールバーを操作したときにOnVScroll()がコールされます。
スクロールバーのどの位置にあるのか…というのは入ってきませんので…
GetScrollInfo()辺りで情報を取得…でしょうか。
SB_ENDSCROLLの時…ですかね…。スクロールバーのボタン押されたままだとどうなるか微妙?
クライアントのサイズなどを取得して(CListCtrlのクライアントの左下辺りの座標で)CListCtrl::HitTest()で確認…というのは邪道ですかねぇ。
取得したアイテムのインデックスが最終インデックスまたは-1の時に最下段までスクロールした…とか。
# ちなみに、使用しているVSのバージョン、またはMFCのバージョンも明記した方が良い…かと思われます。
# 上記(OnVScroll())のはVS2005にて確認…です。
>いきなり1000行は多すぎるので
スレッドを作成して、そっちでアイテムを追加していく…というのもアリでしょう。
同期処理はちょっと手間かも知れませんが。
# ファイルが沢山あるディレクトリをエクスプローラで開いたときに、適度に追加されていく…ということがあります。
言われたとおり、CListCtrlの派生クラスを作ってそのイベントハンドラで
VSCROOLイベントを拾うことができました。
また、そこでGetScrollPos()とGetScrollLimit()を使って、
スクロールバーの最下位置を検出することができました。
無事解決しました。迅速な回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- gooブログ 記事の下にスクロールバーが表示される 2 2022/08/19 20:42
- その他(プログラミング・Web制作) マウスオーバー→ホイール回転でスクロールできない 2 2022/10/31 10:06
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Excel(エクセル) エクセルについて教えてください。 2 2023/06/14 11:11
- その他(IT・Webサービス) このサイトのスクロール逆じゃないですか? 1 2022/10/05 20:48
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- WordPress(ワードプレス) WordpressでYouTubeの埋め込みができない。 1 2022/10/26 01:08
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
CListCtrlで行の高さを指定したい。
C言語・C++・C#
-
リストビューのスクロールバーを非表示にしたい
C言語・C++・C#
-
-
4
MFCでのスクロールバーの扱い
C言語・C++・C#
-
5
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
6
VC++でコントロールの境界線を描画する方法
C言語・C++・C#
-
7
リストコントロールの列幅を固定にする
C言語・C++・C#
-
8
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
9
リストビュー:先頭行のアイテム番号取得
C言語・C++・C#
-
10
MFC ダイアログ上のID取得について
C言語・C++・C#
-
11
リストビューの選択状態を取得するメッセージはありますか?
C言語・C++・C#
-
12
リストビューの表示開始行変更
C言語・C++・C#
-
13
CString から LPCTSTRの型に変換
C言語・C++・C#
-
14
リストビューでNM_CLICKを受け取った時のINDEX取得
C言語・C++・C#
-
15
リソースエディタでスタティックテキストの文字サイズの変更
C言語・C++・C#
-
16
エディットボックスのフォントを変えたい
C言語・C++・C#
-
17
VC++ MFC CListCtrlで、ボタンのあるリストの作り方
C言語・C++・C#
-
18
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
19
ダイアログをスクロールさせるには
C言語・C++・C#
-
20
CStringをwchar_tに変換したい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FriendとPublicの違い。。。
-
エディットコントロールのイベ...
-
コンソールアプリでのクリップ...
-
(UWSC) 「#32770」の意味わかり...
-
ダイアログ表示時にチェックボ...
-
既定のコンストラクタがない?
-
クラスのアドレスを引数として...
-
MFCのCListCtrlでスクロールを検出
-
【C++】vectorについて
-
MessageBoxを継承したい
-
VC++ MFC CFrameWndって・・・
-
C#で定数クラスをシングルトン...
-
DataGridViewのセルに斜線を引...
-
リストコントロールをウィンド...
-
MFCでSDIからダイアログの呼び出し
-
Delphi2007のCheckBox.Font.Col...
-
WindowsAPIのリストビューの...
-
エディットコントロールでEnter...
-
WebBrowserコントロールを継承...
-
イベントにAddHandlerされてい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
ダイアログ表示時にチェックボ...
-
クラスのアドレスを引数として...
-
C++ protectedにアクセス不可
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
ダイアログクラスのコントロー...
-
エディットコントロールでEnter...
-
このコンパイルエラーの意味に...
-
CMainFrameクラスの使い方
-
イベントにAddHandlerされてい...
-
MFC モードレスDlgについて
-
MFCのCListCtrlでスクロールを検出
-
privateなメンバ関数をテストす...
-
[MFC] CWnd::MessageBoxの警告...
-
継承を重ねた場合のコストはど...
-
DataGridViewのセルに斜線を引...
-
ボタンのオーナードローについて
おすすめ情報