- - PR -
MFC CStaticの派生クラスで、スクロールバーを使いたい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-10-25 00:21
スクロールバーの実際の動作は自動的に設定されるものではなく、
それぞれ独自に実装する必要があります。 垂直スクロールバーのメッセージはWM_VSCROLL。これを受けて処理することになります。 ウィザードで作成されるメソッド内でスクロールなどのメソッド呼び出しを記述して実装します。 |
|
投稿日時: 2006-10-25 00:32
こんばんは。
#久しくVC++/MFCを使っていないので、自信ありませんが… WM_VSCROLLメッセージハンドラ内で、SetScrollPosメソッドを使って スクロールボックスの位置を設定する必要があったと思います。 #スイマセン、内容が被ってしまいました(~_~ [ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2006-10-25 00:34 ] |
|
投稿日時: 2006-10-25 00:36
暁さん、Tdnr_Symさん、ご回答ありがとうございます。
派生クラスのWM_VSCROLLのイベント関数ですよね? OnVScroll がそもそも呼ばれないんです 他のイベント関数、OnLButtonDownなどは呼ばれるんですが [ メッセージ編集済み 編集者: ジロボット 編集日時 2006-10-25 00:37 ] |
|
投稿日時: 2006-10-25 00:41
垂直スクロールバーが表示されているエリアをクリックすると
OnVScroll は呼ばれませんが、OnLButtonDown は呼び出されます。 OnLButtonDownの中で実装するのでしょうか? |
|
投稿日時: 2006-10-25 08:22
CStaticはCWndを継承しているのでスクロールバーについても同様に
処理できると思ったのですが……間違いでしたか。すみません。 メソッドを追加する際、ちゃんとクラスウィザードを使用されたのですよね? 《追記》 これは実際やってみると出来なかったです。それ以前にMSDNドキュメントに CStaticは通常は入出力しないと記述がありました。恥ずかしい…… 《追記ここまで》 OnLButtonDownでの実装ですが、ドラッグに追随できないと思います。 またスクロール、クリックで処理を分けないといけなくなるので メソッド内のソースがごちゃごちゃすると思います。 CStaticを別のスクロール可能なコンポーネント内に配置するという選択は出来ないでしょうか? [ メッセージ編集済み 編集者: 暁 編集日時 2006-10-25 08:32 ] [ メッセージ編集済み 編集者: 暁 編集日時 2006-10-26 00:07 ] |
|
投稿日時: 2006-10-25 18:19
暁さん、コメントありがとうございます。
スクロールバーはCStaticと別に用意して並べることにします。 ありがとうございました。 |
1