Materialタブを開いて、WindowにPropertyWndを作ります。
>ウインドウ名 PropertyWnd
>自動設定にチェック
>ダイアログ テンプレート(モーダル)

スピンコントロールを使わずに垂直スクロールバーにしています。
ここで作ったウインドウの幅、 高さは無視されます。
Prj_ab00のDialogBoxEx()で指定されます。
DialogBoxEx()は、ここでRADが生成したDialogBox()をコピーして編集しています。


' ----------------------------------------------------------------------------

'  イベント プロシージャ

' ----------------------------------------------------------------------------

' このファイルには、ウィンドウ [PropertyWnd] に関するイベントをコーディングします。

' ウィンドウ ハンドル: hPropertyWnd



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



Dim	gPosNumBak As Integer

Dim	gRingNumBak As Integer

Dim	gSpeedBak As Integer

Dim	gInitSegment = 1 As Integer

Dim	gInitRing = 1 As Integer



'-----------------------------------------------------------------------------

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



Function PropertyWndProc(hWnd As DWord, dwMsg As DWord, wParam As DWord, lParam As DWord) As DWord

	' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。



	' イベントプロシージャの呼び出しを行います。

	PropertyWndProc=EventCall_PropertyWnd(hWnd,dwMsg,wParam,lParam)

End Function





'-----------------------------------------------------------------------------

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



Sub PropertyWnd_Create(ByRef CreateStruct As CREATESTRUCT)

	gPosNumBak = gPosNum

	gRingNumBak = gRingNum

	gSpeedBak = gSpeed



	Dim	hScroll As DWord

	Dim aScrollInfo As SCROLLINFO

	aScrollInfo.cbSize = Sizeof(SCROLLINFO)

	aScrollInfo.fMask = SIF_POS or SIF_RANGE or SIF_PAGE



	'スピード

	hScroll = GetDlgItem( hPropertyWnd, HScrollBar1 )

	aScrollInfo.nMin = 1

	aScrollInfo.nMax = SPEED_MAX

	aScrollInfo.nPage = 1

	aScrollInfo.nPos = gSpeed

	SetScrollInfo( hScroll, SB_CTL, aScrollInfo, TRUE )



	'点の数

	hScroll = GetDlgItem( hPropertyWnd, VScrollBar1 )

	aScrollInfo.nMin = 3

	aScrollInfo.nMax = POS_MAX

	aScrollInfo.nPage = 1

	aScrollInfo.nPos = gPosNum

	SetScrollInfo( hScroll, SB_CTL, aScrollInfo, TRUE )



	'輪の数

	hScroll = GetDlgItem( hPropertyWnd, VScrollBar2 )

	aScrollInfo.nMin = 1

	aScrollInfo.nMax = POS_RING_MAX

	aScrollInfo.nPage = 5

	aScrollInfo.nPos = gRingNum

	SetScrollInfo( hScroll, SB_CTL, aScrollInfo, TRUE )



	'輪の色(R)

	hScroll = GetDlgItem( hPropertyWnd, HScrollBarR )

	aScrollInfo.nMin = 0

	aScrollInfo.nMax = 255

	aScrollInfo.nPage = 1

	aScrollInfo.nPos = gR

	SetScrollInfo( hScroll, SB_CTL, aScrollInfo, TRUE )



	'輪の色(G)

	hScroll = GetDlgItem( hPropertyWnd, HScrollBarG )

	aScrollInfo.nPos = gG

	SetScrollInfo( hScroll, SB_CTL, aScrollInfo, TRUE )



	'輪の色(B)

	hScroll = GetDlgItem( hPropertyWnd, HScrollBarB )

	aScrollInfo.nPos = gB

	SetScrollInfo( hScroll, SB_CTL, aScrollInfo, TRUE )



	'OKボタンにフォーカス

	SetFocus( GetDlgItem(hPropertyWnd,CommandButton1) )

End Sub



'OKボタン

Sub PropertyWnd_CommandButton1_Click()

	EndDialog( hPropertyWnd, 0 )

End Sub



'キャンセルボタン

Sub PropertyWnd_CancelButton_Click()

	'パラメーターを元に戻す

	gPosNum = gPosNumBak

	gRingNum = gRingNumBak

	gSpeed = gSpeedBak



	EndDialog( hPropertyWnd, 0 )

End Sub



'点の数が編集されたら

Sub PropertyWnd_EditSegmentNum_Change()

	if gInitSegment = 1 then

		'初期化

		gInitSegment = 0

		SetDlgItemText( hPropertyWnd, EditSegmentNum, Str$(gPosNum) )

	endif

End Sub



'点の数のエディットボックスからフォーカスがはずれたら数値をクリップ

Sub PropertyWnd_EditSegmentNum_KillFocus()

	Dim astr As String

	astr = ZeroString( 4 )

	GetDlgItemText( hPropertyWnd, EditSegmentNum,astr,3 )



	Dim anum As Integer

	anum = Val( astr )

	if anum < 3 then anum = 3

	if anum > POS_MAX then anum = POS_MAX

	gPosNum = anum



	SetDlgItemText( hPropertyWnd, EditSegmentNum, Str$(gPosNum) )

End Sub



'輪の数が編集されたら

Sub PropertyWnd_EditRingNum_Change()

	if gInitRing = 1 then

		'初期化

		gInitRing = 0

		SetDlgItemText( hPropertyWnd, EditRingNum, Str$(gRingNum) )

	endif

End Sub



'輪の数のエディットボックスからフォーカスがはずれたら数値をクリップ

Sub PropertyWnd_EditRingNum_KillFocus()

	Dim astr As String

	astr = ZeroString( 5 )

	GetDlgItemText( hPropertyWnd, EditRingNum,astr,4 )



	Dim anum As Integer

	anum = Val( astr )

	if anum < 1 then anum = 1

	if anum > POS_RING_MAX then anum = POS_RING_MAX

	gRingNum = anum



	SetDlgItemText( hPropertyWnd, EditRingNum, Str$(gRingNum) )

End Sub



'RGBの色表示をGDIで

Sub PropertyWnd_DrawRGBBox( hDC As DWord )

	Dim aRect As RECT, aPRect As RECT

	Dim	hRed As DWord



	hRed = GetDlgItem( hPropertyWnd, HScrollBarR )

	GetWindowRect( hPropertyWnd, aPRect )

	GetWindowRect( hRed, aRect )

	aRect.right = aRect.right - aPRect.left

	aRect.top = aRect.top - aPRect.top



	'位置とサイズ

	Dim	aPicX As Integer, aPicY As Integer

	aPicX = aRect.right + 10

	aPicY = aRect.top + 5



	aPicY = aPicY - GetSystemMetrics(SM_CYFIXEDFRAME)

	aPicY = aPicY - GetSystemMetrics(SM_CYEDGE)

	aPicY = aPicY - GetSystemMetrics(SM_CYCAPTION)

	aRect.left = aPicX

	aRect.top = aPicY

	aRect.right = aPicX + 60

	aRect.bottom = aPicY + 60



	Dim ps As PAINTSTRUCT

	Dim hBrush As DWord

	hBrush = CreateSolidBrush( RGB(gR,gG,gB) )

	FillRect( hDC, aRect, hBrush )

	DeleteObject( hBrush )

End Sub



'RGBのスクロールバーをコントロール

Sub PropertyWnd_HScrollRGB(nScrollCode As Long, nPos As Integer, hwndScrollBar As DWord, ByRef pCol As Integer)

	select case nScrollCode

		case SB_LINELEFT

			pCol = pCol - 1

			if pCol < 0 then pCol = 0

		case SB_LINERIGHT

			pCol = pCol + 1

			if pCol > 255 then pCol = 255

		case SB_PAGELEFT

			pCol = pCol - 1

			if pCol < 0 then pCol = 0

		case SB_PAGERIGHT

			pCol = pCol + 1

			if pCol > 255 then pCol = 255

		case SB_THUMBTRACK

			pCol = nPos

	End Select



	'再描画する

	InvalidateRect( hPropertyWnd, ByVal 0, 0 )

End Sub



'水平スクロールバー

Sub PropertyWnd_HScroll(nScrollCode As Long, nPos As Integer, hwndScrollBar As DWord)



	if nScrollCode <> SB_ENDSCROLL then

		Dim aScrollInfo As SCROLLINFO



		if hwndScrollBar = GetDlgItem( hPropertyWnd, HScrollBarR ) then

			PropertyWnd_HScrollRGB( nScrollCode, nPos, hwndScrollBar, gR )

			aScrollInfo.nPos = gR

		Elseif hwndScrollBar = GetDlgItem( hPropertyWnd, HScrollBarG ) then

			PropertyWnd_HScrollRGB( nScrollCode, nPos, hwndScrollBar, gG )

			aScrollInfo.nPos = gG

		Elseif hwndScrollBar = GetDlgItem( hPropertyWnd, HScrollBarB ) then

			PropertyWnd_HScrollRGB( nScrollCode, nPos, hwndScrollBar, gB )

			aScrollInfo.nPos = gB

		Else

			'スピード

			select case nScrollCode

			case SB_LINELEFT

				gSpeed = gSpeed - 1

				if gSpeed < 1 then gSpeed = 1

			case SB_LINERIGHT

				gSpeed = gSpeed + 1

				if gSpeed > SPEED_MAX then gSpeed = SPEED_MAX

			case SB_PAGELEFT

				gSpeed = gSpeed - 1

				if gSpeed < 1 then gSpeed = 1

			case SB_PAGERIGHT

				gSpeed = gSpeed + 1

				if gSpeed > SPEED_MAX then gSpeed = SPEED_MAX

			case SB_THUMBTRACK

				gSpeed = nPos

			case Else

			End Select

			aScrollInfo.nPos = gSpeed

		endif



	    aScrollInfo.cbSize = Sizeof(SCROLLINFO)

		aScrollInfo.fMask = SIF_POS

		SetScrollInfo( hwndScrollBar, SB_CTL, aScrollInfo, TRUE )

	endif



End Sub



'垂直スクロールバー

Sub PropertyWnd_VScroll(nScrollCode As Long, nPos As Integer, hwndScrollBar As DWord)



	if nScrollCode <> SB_ENDSCROLL then

		if hwndScrollBar = GetDlgItem( hPropertyWnd, VScrollBar1 ) then

			Select Case nScrollCode

				case SB_LINEUP

					gPosNum = gPosNum - 1

					if gPosNum < 3 then gPosNum = 3

				case SB_LINEDOWN

					gPosNum = gPosNum + 1

					if gPosNum > POS_MAX then gPosNum = POS_MAX

			End Select

			SetDlgItemText( hPropertyWnd, EditSegmentNum, Str$(gPosNum) )

		endif



		if hwndScrollBar = GetDlgItem( hPropertyWnd, VScrollBar2 ) then

			Select Case nScrollCode

				case SB_LINEUP

					gRingNum = gRingNum - 1

					if gRingNum < 1 then gRingNum = 1

				case SB_LINEDOWN

					gRingNum = gRingNum + 1

					if gRingNum > POS_RING_MAX then gRingNum = POS_RING_MAX

			End Select

			SetDlgItemText( hPropertyWnd, EditRingNum, Str$(gRingNum) )

		endif

	endif



End Sub



Sub PropertyWnd_Paint(hDC As DWord)



	PropertyWnd_DrawRGBBox( hDC )



End Sub



Sub PropertyWnd_Destroy()

	gInitSegment = 1

	gInitRing = 1

End Sub

次へ


back