スクロールバーのなぞ

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
Tz

スクロールバーのなぞ

#1 投稿記事 by Tz »

すみません、ちょっと質問します。

AB4において、RADツールでノーマルウィンドウを作成し、そこに、コントロールから水平スクロールバー「HScrollBar1」を一つ貼り付けた状態で、イベントの「Create」を追加し、以下のようなコードを組みました。
単純に、スクロールボックスを中央に持っていくだけのプログラムのはずなので、確かに、スクロールボックスは、中央に行くのですが、なぜか、このスクロールバーの3Pixel程度上にもう一つスクロールバーが現れてしまいます。
この勝手に現れるスクロールバーを消すことはできないのでしょうか?

開発環境
Windows 2000 SP4
Active Basic 4.02


'以下MainWnd.sbpのファイルの中
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。


'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数

Function MainWndProc(hWnd As DWord, dwMsg As DWord, wParam As DWord, lParam As DWord) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。

' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function


'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub MainWnd_Destroy()
ScrollTest_DestroyObjects()
PostQuitMessage(0)
End Sub

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
'スクロールボックスを中央へ
Dim lpsi As SCROLLINFO
lpsi.fMask=SIF_PAGE Or SIF_POS Or SIF_RANGE
lpsi.nPage=11
lpsi.nPos=45
lpsi.nMin=0
lpsi.nMax=100
lpsi.cbSize=Len(lpsi)
SetScrollInfo(GetDlgItem(hMainWnd,HScrollBar1),SB_HORZ,lpsi,FALSE)
'ここまで
End Sub
xsb007

#2 投稿記事 by xsb007 »

スクロールバーコントロールには、SB_CTLを使う必要があります。

誤:
SetScrollInfo(GetDlgItem(hMainWnd,HScrollBar1),SB_HORZ,lpsi,FALSE)

正:
SetScrollInfo(GetDlgItem(hMainWnd,HScrollBar1),SB_CTL,lpsi,FALSE)
Tz

ありがとうございました。

#3 投稿記事 by Tz »

なるほど。
確かに、ヘルプにも書いてありました。
水平スクロールバーだから、SB_HORZなのかと思いましたが、コントロールはすべて、SB_CTLを指定するのですね。
よく読んでいたつもりでしたが、抜けていたようで、お恥ずかしい限りです。
回答していただいたxsb007さん、ありがとうございました。
返信する