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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
MFCでのスクロールバーの扱い
C言語・C++・C#
-
CListCtrlで行の高さを指定したい。
C言語・C++・C#
-
-
4
リストビューのスクロールバーを非表示にしたい
C言語・C++・C#
-
5
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
6
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
7
リストビューの表示開始行変更
C言語・C++・C#
-
8
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
9
VC++でコントロールの境界線を描画する方法
C言語・C++・C#
-
10
リストビュー:先頭行のアイテム番号取得
C言語・C++・C#
-
11
リソースエディタでスタティックテキストの文字サイズの変更
C言語・C++・C#
-
12
MFC ダイアログ上のID取得について
C言語・C++・C#
-
13
リストビューの選択状態を取得するメッセージはありますか?
C言語・C++・C#
-
14
リストコントロールの列幅を固定にする
C言語・C++・C#
-
15
CMainFrameクラスの使い方
C言語・C++・C#
-
16
テキストボックスからフォーカス外す
C言語・C++・C#
-
17
リストコントロール(MFC or API)の最後尾にアイテムを追加するには?
C言語・C++・C#
-
18
MFCダイアログボックスを最前面に表示
C言語・C++・C#
-
19
複数列リストコントロールについて
C言語・C++・C#
-
20
エディットボックスのフォントを変えたい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FriendとPublicの違い。。。
-
VBのDLLの関数をVC++で使う
-
【ASP.NET】 独自で作成したク...
-
既定のコンストラクタがない?
-
DirextX9.0を使用した2Dゲーム...
-
継承を重ねた場合のコストはど...
-
ダイアログ表示時にチェックボ...
-
自作のクラスが参照できない
-
MFCのCListCtrlでスクロールを検出
-
DebugクラスとTraceクラスの違い
-
(UWSC) 「#32770」の意味わかり...
-
コンソールアプリでのクリップ...
-
イベントにAddHandlerされてい...
-
[MFC] CWnd::MessageBoxの警告...
-
C++ protectedにアクセス不可
-
C++ 図からソースコード自動生成
-
オーバーライド関数の呼び出し...
-
VBのシステムの設計書にUMLは適...
-
ダイアログクラスのコントロー...
-
クラスのアドレスを引数として...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
イベントにAddHandlerされてい...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールのイベ...
-
エディットコントロールでEnter...
-
WindowsAPIのリストビューの...
-
CMainFrameクラスの使い方
-
DebugクラスとTraceクラスの違い
-
MessageBoxを継承したい
-
C++ protectedにアクセス不可
-
MFCアプリのコマンドラインでパ...
-
このコンパイルエラーの意味に...
-
MFCのドラッグ&ドロップについて
-
【ASP.NET】 独自で作成したク...
-
派生クラスから基本クラスprote...
-
ダイアログクラスのコントロー...
-
C#で通常のbuttonコントロール...
おすすめ情報