- PR -

MFC CStaticの派生クラスで、スクロールバーを使いたい

1
投稿者投稿内容
ジロボット
常連さん
会議室デビュー日: 2004/02/29
投稿数: 40
投稿日時: 2006-10-24 20:20
画像のサムネイル表示をするようなCStaticの派生クラスを実装しております
クライアント領域のサイズに応じて、垂直スクロールバーを表示して使いたいのですが、以下のソースだけではスクロールバーがマウスクリックに反応しません。垂直スクロールバーの表示は(おそらく最大・最小値も)正しく設定できているようです

EnableScrollBar(SB_VERT);
SCROLLINFO scrl;
scrl.fMask = SIF_PAGE | SIF_POS | SIF_RANGE;
scrl.nMin = 0;
scrl.nMax = nMax;
scrl.nPage = 1;
scrl.nPos = 0;
SetScrollInfo(SB_VERT, &scrl);

何が足りないのでしょうか? よろしくお願い致します
大ベテラン
会議室デビュー日: 2006/06/28
投稿数: 116
投稿日時: 2006-10-25 00:21
スクロールバーの実際の動作は自動的に設定されるものではなく、
それぞれ独自に実装する必要があります。
垂直スクロールバーのメッセージはWM_VSCROLL。これを受けて処理することになります。
ウィザードで作成されるメソッド内でスクロールなどのメソッド呼び出しを記述して実装します。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2006-10-25 00:32
こんばんは。

#久しくVC++/MFCを使っていないので、自信ありませんが…

WM_VSCROLLメッセージハンドラ内で、SetScrollPosメソッドを使って
スクロールボックスの位置を設定する必要があったと思います。

#スイマセン、内容が被ってしまいました(~_~


[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2006-10-25 00:34 ]
ジロボット
常連さん
会議室デビュー日: 2004/02/29
投稿数: 40
投稿日時: 2006-10-25 00:36
暁さん、Tdnr_Symさん、ご回答ありがとうございます。
派生クラスのWM_VSCROLLのイベント関数ですよね?
OnVScroll がそもそも呼ばれないんです
他のイベント関数、OnLButtonDownなどは呼ばれるんですが

[ メッセージ編集済み 編集者: ジロボット 編集日時 2006-10-25 00:37 ]
ジロボット
常連さん
会議室デビュー日: 2004/02/29
投稿数: 40
投稿日時: 2006-10-25 00:41
垂直スクロールバーが表示されているエリアをクリックすると
OnVScroll は呼ばれませんが、OnLButtonDown は呼び出されます。
OnLButtonDownの中で実装するのでしょうか?
大ベテラン
会議室デビュー日: 2006/06/28
投稿数: 116
投稿日時: 2006-10-25 08:22
CStaticはCWndを継承しているのでスクロールバーについても同様に
処理できると思ったのですが……間違いでしたか。すみません。
メソッドを追加する際、ちゃんとクラスウィザードを使用されたのですよね?
《追記》
これは実際やってみると出来なかったです。それ以前にMSDNドキュメントに
CStaticは通常は入出力しないと記述がありました。恥ずかしい……
《追記ここまで》

OnLButtonDownでの実装ですが、ドラッグに追随できないと思います。
またスクロール、クリックで処理を分けないといけなくなるので
メソッド内のソースがごちゃごちゃすると思います。
CStaticを別のスクロール可能なコンポーネント内に配置するという選択は出来ないでしょうか?

[ メッセージ編集済み 編集者: 暁 編集日時 2006-10-25 08:32 ]

[ メッセージ編集済み 編集者: 暁 編集日時 2006-10-26 00:07 ]
ジロボット
常連さん
会議室デビュー日: 2004/02/29
投稿数: 40
投稿日時: 2006-10-25 18:19
暁さん、コメントありがとうございます。
スクロールバーはCStaticと別に用意して並べることにします。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)