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