
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#
-
リストビューのスクロールバーを非表示にしたい
C言語・C++・C#
-
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
-
4
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
5
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
6
エディットボックスのフォントを変えたい
C言語・C++・C#
-
7
リストコントロールの列幅を固定にする
C言語・C++・C#
-
8
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
9
MFC ダイアログ上のID取得について
C言語・C++・C#
-
10
CListCtrlで行の高さを指定したい。
C言語・C++・C#
-
11
CListCtrl の特定のセル(アイテム?)の文字だけ中央で表示したい
C言語・C++・C#
-
12
エディットボックスの入力制限について
C言語・C++・C#
-
13
エディットコントロールのイベントハンドラ
Microsoft ASP
-
14
ダイアログ表示時にチェックボックスにチェックされている状態にするには?
C言語・C++・C#
-
15
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
16
MFCでコンボボックスを選択不可状態にしたい
C言語・C++・C#
-
17
EDITコントロールで入力できる文字を制限するには?
C言語・C++・C#
-
18
仮想リストコントロールの表示
C言語・C++・C#
-
19
CString から LPCTSTRの型に変換
C言語・C++・C#
-
20
MFCでOnPaintのタイミング
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ASP.NET】 独自で作成したク...
-
ボタンのオーナードローについて
-
MFCアプリのコマンドラインでパ...
-
FriendとPublicの違い。。。
-
関数重複の問題
-
(UWSC) 「#32770」の意味わかり...
-
[MFC] CWnd::MessageBoxの警告...
-
基本クラスのポインタで、派生...
-
IncludeではなくClassで宣言す...
-
イベントにAddHandlerされてい...
-
ダイアログクラスのコントロー...
-
このコンパイルエラーの意味に...
-
C++のMFCを使っています。
-
C#で定数クラスをシングルトン...
-
エディットコントロールでEnter...
-
OnPaintとOnDraw関数の違いにつ...
-
OnInitDialog()の関数の組み込み方
-
クラスのアドレスを引数として...
-
vba sendKeysを送る相手のソフ...
-
C++では構造体がメンバ関数をも...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
イベントにAddHandlerされてい...
-
ダイアログ表示時にチェックボ...
-
エディットコントロールでEnter...
-
(UWSC) 「#32770」の意味わかり...
-
C++ protectedにアクセス不可
-
クラスのアドレスを引数として...
-
エディットコントロールのイベ...
-
【ASP.NET】 独自で作成したク...
-
MFCのドラッグ&ドロップについて
-
オーバーライド関数の呼び出し...
-
C++/CLIからC++の呼び出しで例外
-
ボタンのオーナードローについて
-
C++で継承元のクラスの代入演算...
-
MFCアプリのコマンドラインでパ...
-
DLLからEXEのクラスを呼び出す...
-
MFCのCListCtrlでスクロールを検出
-
オブジェクト指向 集約の実装...
-
ダイアログクラスのコントロー...
おすすめ情報