Files
Client/Library/dxx8/samples/Multimedia/VBSamples/DirectShow/VBDemo/vbdemo.frm
LGram16 e067522598 Initial commit: ROW Client source code
Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 16:24:34 +09:00

805 lines
31 KiB
Plaintext

VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
Begin VB.Form frmMain
BorderStyle = 1 'Fixed Single
Caption = "DirectShow VB Sample"
ClientHeight = 8190
ClientLeft = 75
ClientTop = 600
ClientWidth = 5625
DrawMode = 1 'Blackness
FillStyle = 0 'Solid
HasDC = 0 'False
Icon = "vbdemo.frx":0000
LinkTopic = "frmMain"
LockControls = -1 'True
MaxButton = 0 'False
PaletteMode = 1 'UseZOrder
ScaleHeight = 8190
ScaleWidth = 5625
Begin MSComctlLib.Toolbar tbControlBar
Align = 1 'Align Top
Height = 540
Left = 0
TabIndex = 20
Top = 0
Width = 5625
_ExtentX = 9922
_ExtentY = 953
ButtonWidth = 820
ButtonHeight = 794
Appearance = 1
ImageList = "ctrlImageList"
_Version = 393216
BeginProperty Buttons {66833FE8-8583-11D1-B16A-00C0F0283628}
NumButtons = 3
BeginProperty Button1 {66833FEA-8583-11D1-B16A-00C0F0283628}
Key = "play"
Object.ToolTipText = "Play"
ImageIndex = 1
EndProperty
BeginProperty Button2 {66833FEA-8583-11D1-B16A-00C0F0283628}
Key = "pause"
Object.ToolTipText = "Pause"
ImageIndex = 2
EndProperty
BeginProperty Button3 {66833FEA-8583-11D1-B16A-00C0F0283628}
Key = "stop"
Object.ToolTipText = "Stop"
ImageIndex = 3
EndProperty
EndProperty
End
Begin VB.PictureBox picVideoWindow
Appearance = 0 'Flat
BackColor = &H00000000&
BorderStyle = 0 'None
DrawMode = 1 'Blackness
FillStyle = 0 'Solid
ForeColor = &H80000008&
HasDC = 0 'False
Height = 4095
Left = 60
MouseIcon = "vbdemo.frx":0442
MousePointer = 99 'Custom
ScaleHeight = 4095
ScaleWidth = 5475
TabIndex = 16
Top = 660
Width = 5475
End
Begin VB.Frame fraInfo
Caption = "Information:"
Height = 2055
Left = 60
TabIndex = 9
Top = 6060
Width = 5475
Begin VB.OptionButton optPlaybackRate
Caption = "Double (200%)"
Height = 195
Index = 2
Left = 3900
TabIndex = 2
ToolTipText = "Double Speed"
Top = 1680
Width = 1335
End
Begin VB.OptionButton optPlaybackRate
Caption = "Normal (100%)"
Height = 195
Index = 1
Left = 2460
TabIndex = 1
ToolTipText = "Normal Speed"
Top = 1680
Width = 1515
End
Begin VB.OptionButton optPlaybackRate
Caption = "Half (50%)"
Height = 195
Index = 0
Left = 1320
TabIndex = 0
ToolTipText = "Half Speed"
Top = 1680
Width = 1215
End
Begin VB.TextBox txtDuration
BackColor = &H8000000F&
ForeColor = &H80000012&
Height = 270
Left = 1920
Locked = -1 'True
TabIndex = 12
TabStop = 0 'False
Top = 360
Width = 3315
End
Begin VB.TextBox txtElapsed
BackColor = &H8000000F&
ForeColor = &H80000012&
Height = 270
Left = 1920
Locked = -1 'True
TabIndex = 11
TabStop = 0 'False
Top = 720
Width = 3315
End
Begin VB.TextBox txtRate
BackColor = &H8000000F&
ForeColor = &H80000012&
Height = 270
Left = 1920
Locked = -1 'True
TabIndex = 10
TabStop = 0 'False
Top = 1080
Width = 3315
End
Begin VB.Label lblResetSpeed
Caption = "Reset speed:"
Height = 255
Left = 240
TabIndex = 17
Top = 1680
Width = 1095
End
Begin VB.Line Line1
X1 = 240
X2 = 5240
Y1 = 1500
Y2 = 1500
End
Begin VB.Label lblElapsed
Caption = "Elapsed Time:"
Height = 255
Left = 240
TabIndex = 15
ToolTipText = "Elapsed Time (Seconds)"
Top = 720
Width = 1575
End
Begin VB.Label lblRate
Caption = "Playback speed:"
Height = 255
Left = 240
TabIndex = 14
ToolTipText = "Playback Speed (Frames Per Second)"
Top = 1080
Width = 1335
End
Begin VB.Label lblDuration
Caption = "Length:"
Height = 255
Left = 240
TabIndex = 13
ToolTipText = "Media Length (Seconds)"
Top = 360
Width = 1455
End
End
Begin VB.Frame frameBalance
Caption = "Balance"
Height = 1215
Left = 2820
TabIndex = 6
Top = 4800
Width = 2715
Begin MSComctlLib.Slider slBalance
Height = 495
Left = 340
TabIndex = 19
Top = 300
Width = 2000
_ExtentX = 3519
_ExtentY = 873
_Version = 393216
LargeChange = 1000
SmallChange = 500
Min = -5000
Max = 5000
TickFrequency = 1000
End
Begin VB.Label lblRight
Caption = "Right"
Height = 255
Left = 2160
TabIndex = 8
Top = 840
Width = 435
End
Begin VB.Label lblLeft
Caption = "Left"
Height = 255
Left = 120
TabIndex = 7
Top = 840
Width = 495
End
End
Begin VB.Timer tmrTimer
Left = 1080
Top = 8640
End
Begin VB.Frame frameVolume
Caption = "Volume"
Height = 1215
Left = 60
TabIndex = 3
Top = 4800
Width = 2595
Begin MSComctlLib.Slider slVolume
Height = 495
Left = 340
TabIndex = 18
Top = 300
Width = 2000
_ExtentX = 3519
_ExtentY = 873
_Version = 393216
LargeChange = 400
SmallChange = 100
Min = -4000
Max = 0
TickFrequency = 400
End
Begin VB.Label lblMax
Caption = "Max"
Height = 255
Left = 2100
TabIndex = 5
Top = 840
Width = 375
End
Begin VB.Label lblMin
Caption = "Min"
Height = 255
Left = 120
TabIndex = 4
Top = 840
Width = 495
End
End
Begin MSComDlg.CommonDialog ctrlCommonDialog
Left = 600
Top = 8580
_ExtentX = 847
_ExtentY = 847
_Version = 393216
End
Begin MSComctlLib.ImageList ctrlImageList
Left = 0
Top = 8580
_ExtentX = 1005
_ExtentY = 1005
BackColor = -2147483643
ImageWidth = 24
ImageHeight = 24
MaskColor = 12632256
_Version = 393216
BeginProperty Images {2C247F25-8591-11D1-B16A-00C0F0283628}
NumListImages = 3
BeginProperty ListImage1 {2C247F27-8591-11D1-B16A-00C0F0283628}
Picture = "vbdemo.frx":0594
Key = ""
EndProperty
BeginProperty ListImage2 {2C247F27-8591-11D1-B16A-00C0F0283628}
Picture = "vbdemo.frx":06A6
Key = ""
EndProperty
BeginProperty ListImage3 {2C247F27-8591-11D1-B16A-00C0F0283628}
Picture = "vbdemo.frx":07B8
Key = ""
EndProperty
EndProperty
End
Begin VB.Menu mnu_File
Caption = "&File"
Begin VB.Menu mnu_FileOpen
Caption = "&Open"
Shortcut = ^O
End
Begin VB.Menu mnuFileSeptum
Caption = "-"
End
Begin VB.Menu mnu_FileExit
Caption = "E&xit"
End
End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'*******************************************************************************
'* This is a part of the Microsoft DXSDK Code Samples.
'* Copyright (C) 1999-2001 Microsoft Corporation.
'* All rights reserved.
'* This source code is only intended as a supplement to
'* Microsoft Development Tools and/or SDK documentation.
'* See these sources for detailed information regarding the
'* Microsoft samples programs.
'*******************************************************************************
Option Explicit
Option Base 0
Option Compare Text
Private m_dblRate As Double 'Rate in Frames Per Second
Private m_bstrFileName As String 'Loaded Filename
Private m_dblRunLength As Double 'Duration in seconds
Private m_dblStartPosition As Double 'Start position in seconds
Private m_boolVideoRunning As Boolean 'Flag used to trigger clock
Private m_objBasicAudio As IBasicAudio 'Basic Audio Object
Private m_objBasicVideo As IBasicVideo 'Basic Video Object
Private m_objMediaEvent As IMediaEvent 'MediaEvent Object
Private m_objVideoWindow As IVideoWindow 'VideoWindow Object
Private m_objMediaControl As IMediaControl 'MediaControl Object
Private m_objMediaPosition As IMediaPosition 'MediaPosition Object
' **************************************************************************************************************************************
' * PRIVATE INTERFACE- FORM EVENT HANDLERS
' *
' *
' ******************************************************************************************************************************
' * procedure name: Form_Load
' * procedure description: Occurs when a form is loaded.
' *
' ******************************************************************************************************************************
Private Sub Form_Load()
On Local Error GoTo ErrLine
'reset the rate to 1 (normal)
optPlaybackRate(1).Value = True
'Alter the coordinate system so that we work
'in pixels (instead of the default twips)
frmMain.ScaleMode = 3 ' pixels
'Set the granularity for the timer control
'so that we can display the duration for
'given video sequence.
tmrTimer.Interval = 250 '1/4 second intervals
'disable all the control buttons by default
tbControlBar.Buttons("play").Enabled = False
tbControlBar.Buttons("stop").Enabled = False
tbControlBar.Buttons("pause").Enabled = False
Exit Sub
ErrLine:
Err.Clear
Exit Sub
End Sub
' ******************************************************************************************************************************
' * procedure name: Form_Unload
' * procedure description: Occurs when a form is about to be removed from the screen.
' *
' ******************************************************************************************************************************
Private Sub Form_Unload(Cancel As Integer)
On Local Error GoTo ErrLine
'stop playback
m_boolVideoRunning = False
DoEvents
'cleanup media control
If Not m_objMediaControl Is Nothing Then
m_objMediaControl.Stop
End If
'clean-up video window
If Not m_objVideoWindow Is Nothing Then
m_objVideoWindow.Left = Screen.Width * 8
m_objVideoWindow.Height = Screen.Height * 8
m_objVideoWindow.Owner = 0 'sets the Owner to NULL
End If
'clean-up & dereference
If Not m_objBasicAudio Is Nothing Then Set m_objBasicAudio = Nothing
If Not m_objBasicVideo Is Nothing Then Set m_objBasicVideo = Nothing
If Not m_objMediaControl Is Nothing Then Set m_objMediaControl = Nothing
If Not m_objVideoWindow Is Nothing Then Set m_objVideoWindow = Nothing
If Not m_objMediaPosition Is Nothing Then Set m_objMediaPosition = Nothing
Exit Sub
ErrLine:
Err.Clear
Exit Sub
End Sub
' ******************************************************************************************************************************
' * procedure name: mnuFileExit_Click
' * procedure description: Occurs when the "Exit" option is invoked from the "File" option on the main menubar.
' *
' ******************************************************************************************************************************
Private Sub mnuFileExit_Click()
Dim frm As Form
On Local Error GoTo ErrLine
'unload each loaded form
For Each frm In Forms
frm.Move Screen.Width * 8, Screen.Height * 8
Unload frm
Set frm = Nothing
Next
Exit Sub
ErrLine:
Err.Clear
Exit Sub
End Sub
' ******************************************************************************************************************************
' * procedure name: mnu_FileExit_Click
' * procedure description: Occurs when the user elects the 'Exit' option via the main 'File' menu.
' *
' ******************************************************************************************************************************
Private Sub mnu_FileExit_Click()
Dim frm As Form
On Local Error GoTo ErrLine
For Each frm In Forms
frm.Move Screen.Width * 8, Screen.Height * 8
frm.Visible = False: Unload frm
Next
Exit Sub
ErrLine:
Err.Clear
Exit Sub
End Sub
' ******************************************************************************************************************************
' * procedure name: mnu_FileOpen_Click
' * procedure description: Occurs when the user elects the 'Open' option via the main 'File' menu.
' *
' ******************************************************************************************************************************
Private Sub mnu_FileOpen_Click()
Dim nCount As Long
On Local Error GoTo ErrLine
' Use the common file dialog to select a media file
' (has the extension .AVI or .MPG.)
' Initialize global variables based on the
' contents of the file:
' m_bstrFileName - name of file name selected by the user
' m_dblRunLength = length of the file; duration
' m_dblStartPosition - point at which to start playing clip
' m_objMediaControl, m_objMediaEvent, m_objMediaPosition,
' m_objBasicAudio, m_objVideoWindow - programmable objects
'clean up memory (in case a file is already open)
Call Form_Unload(True)
'Retrieve the name of an .avi or an .mpg
'file that the user wishes to view.
ctrlCommonDialog.Filter = "Media Files (*.mpg;*.avi;*.mov;*.wav;*.mp2;*.mp3)|*.mpg;*.avi;*.mov;*.wav;*.mp2;*.mp3"
ctrlCommonDialog.ShowOpen
m_bstrFileName = ctrlCommonDialog.FileName
'Instantiate a filter graph for the requested
'file format.
Set m_objMediaControl = New FilgraphManager
Call m_objMediaControl.RenderFile(m_bstrFileName)
'Setup the IBasicAudio object (this
'is equivalent to calling QueryInterface()
'on IFilterGraphManager). Initialize the volume
'to the maximum value.
' Some filter graphs don't render audio
' In this sample, skip setting volume property
Set m_objBasicAudio = m_objMediaControl
m_objBasicAudio.Volume = slVolume.Value
m_objBasicAudio.Balance = slBalance.Value
'Setup the IVideoWindow object. Remove the
'caption, border, dialog frame, and scrollbars
'from the default window. Position the window.
'Set the parent to the app's form.
Set m_objVideoWindow = m_objMediaControl
m_objVideoWindow.WindowStyle = CLng(&H6000000)
m_objVideoWindow.Top = 0
m_objVideoWindow.Left = 0
m_objVideoWindow.Width = picVideoWindow.Width
m_objVideoWindow.Height = picVideoWindow.Height
'reset the video window owner
m_objVideoWindow.Owner = picVideoWindow.hWnd
'Setup the IMediaEvent object for the
'sample toolbar (run, pause, play).
Set m_objMediaEvent = m_objMediaControl
'Setup the IMediaPosition object so that we
'can display the duration of the selected
'video as well as the elapsed time.
Set m_objMediaPosition = m_objMediaControl
'set the playback rate given the desired optional
For nCount = optPlaybackRate.LBound To optPlaybackRate.UBound
If optPlaybackRate(nCount).Value = True Then
Select Case nCount
Case 0
If Not m_objMediaPosition Is Nothing Then _
m_objMediaPosition.Rate = 0.5
Case 1
If Not m_objMediaPosition Is Nothing Then _
m_objMediaPosition.Rate = 1
Case 2
If Not m_objMediaPosition Is Nothing Then _
m_objMediaPosition.Rate = 2
End Select
Exit For
End If
Next
m_dblRunLength = Round(m_objMediaPosition.Duration, 2)
txtDuration.Text = CStr(m_dblRunLength)
' Reset start position to 0
m_dblStartPosition = 0
' Use user-established playback rate
m_dblRate = m_objMediaPosition.Rate
txtRate.Text = CStr(m_dblRate)
'enable run buttons by default
tbControlBar.Buttons("play").Enabled = True
tbControlBar.Buttons("stop").Enabled = False
tbControlBar.Buttons("pause").Enabled = False
'run the media file
Call tbControlBar_ButtonClick(tbControlBar.Buttons(1))
Exit Sub
ErrLine:
Err.Clear
Resume Next
Exit Sub
End Sub
' ******************************************************************************************************************************
' * procedure name: optPlaybackRate_Click
' * procedure description: Indicates that the contents of a control have changed.
' *
' ******************************************************************************************************************************
Private Sub optPlaybackRate_Click(Index As Integer)
On Local Error GoTo ErrLine
'reset textbox
Select Case Index
Case 0
If Not m_objMediaPosition Is Nothing Then _
txtRate.Text = 0.5
Case 1
If Not m_objMediaPosition Is Nothing Then _
txtRate.Text = 1
Case 2
If Not m_objMediaPosition Is Nothing Then _
txtRate.Text = 2
End Select
'reset media playback rate
If Not m_objMediaPosition Is Nothing Then
Select Case Index
Case 0
If Not m_objMediaPosition Is Nothing Then _
m_objMediaPosition.Rate = 0.5
Case 1
If Not m_objMediaPosition Is Nothing Then _
m_objMediaPosition.Rate = 1
Case 2
If Not m_objMediaPosition Is Nothing Then _
m_objMediaPosition.Rate = 2
End Select
End If
Exit Sub
ErrLine:
Err.Clear
Exit Sub
End Sub
' ******************************************************************************************************************************
' * procedure name: slBalance_Change
' * procedure description: Indicates that the contents of a control have changed.
' *
' ******************************************************************************************************************************
Private Sub slBalance_Change()
On Local Error GoTo ErrLine
'Set the balance using the slider
If Not m_objMediaControl Is Nothing Then _
m_objBasicAudio.Balance = slBalance.Value
Exit Sub
ErrLine:
Err.Clear
Exit Sub
End Sub
' ******************************************************************************************************************************
' * procedure name: slVolume_Change
' * procedure description: Indicates that the contents of a control have changed.
' *
' ******************************************************************************************************************************
Private Sub slVolume_Change()
On Local Error GoTo ErrLine
'Set the volume using the slider
If Not m_objMediaControl Is Nothing Then _
m_objBasicAudio.Volume = slVolume.Value
Exit Sub
ErrLine:
Err.Clear
Exit Sub
End Sub
' ******************************************************************************************************************************
' * procedure name: slBalance_MouseMove
' * procedure description: Occurs when the user moves the mouse.
' *
' ******************************************************************************************************************************
Private Sub slBalance_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
On Local Error GoTo ErrLine
'Set the balance using the slider
If Not m_objMediaControl Is Nothing Then _
m_objBasicAudio.Balance = slBalance.Value
Exit Sub
ErrLine:
Err.Clear
Exit Sub
End Sub
' ******************************************************************************************************************************
' * procedure name: slVolume_MouseMove
' * procedure description: Occurs when the user moves the mouse.
' *
' ******************************************************************************************************************************
Private Sub slVolume_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
On Local Error GoTo ErrLine
'Set the volume using the slider
If Not m_objMediaControl Is Nothing Then _
m_objBasicAudio.Volume = slVolume.Value
Exit Sub
ErrLine:
Err.Clear
Exit Sub
End Sub
' ******************************************************************************************************************************
' * procedure name: tbControlBar_ButtonClick
' * procedure description: Occurs when the user clicks on a Button object in a Toolbar control.
' *
' ******************************************************************************************************************************
Private Sub tbControlBar_ButtonClick(ByVal Button As Button)
On Local Error GoTo ErrLine
' handle buttons on the toolbar
' buttons 1, 3 and 5 are defined; 2 and 4 are separators
' all DirectShow objects are defined only if the user
' has already selected a filename and initialized the objects
' if the objects aren't defined, avoid errors
If Not m_objMediaControl Is Nothing Then
If Button.Key = "play" Then 'PLAY
'Invoke the MediaControl Run() method
'and pause the video that is being
'displayed through the predefined
'filter graph.
'Assign specified starting position dependent on state
If CLng(m_objMediaPosition.CurrentPosition) < CLng(m_dblStartPosition) Then
m_objMediaPosition.CurrentPosition = m_dblStartPosition
ElseIf CLng(m_objMediaPosition.CurrentPosition) = CLng(m_dblRunLength) Then
m_objMediaPosition.CurrentPosition = m_dblStartPosition
End If
Call m_objMediaControl.Run
m_boolVideoRunning = True
'enable/disable control buttons
tbControlBar.Buttons("play").Enabled = False
tbControlBar.Buttons("stop").Enabled = True
tbControlBar.Buttons("pause").Enabled = True
ElseIf Button.Key = "pause" Then 'PAUSE
'Invoke the MediaControl Pause() method
'and pause the video that is being
'displayed through the predefined
'filter graph.
Call m_objMediaControl.Pause
m_boolVideoRunning = False
'enable/disable control buttons
tbControlBar.Buttons("play").Enabled = True
tbControlBar.Buttons("stop").Enabled = True
tbControlBar.Buttons("pause").Enabled = False
ElseIf Button.Key = "stop" Then 'STOP
'Invoke the MediaControl Stop() method
'and stop the video that is being
'displayed through the predefined
'filter graph.
Call m_objMediaControl.Stop
m_boolVideoRunning = False
' reset to the beginning of the video
m_objMediaPosition.CurrentPosition = 0
txtElapsed.Text = "0.0"
'enable/disable control buttons
tbControlBar.Buttons("play").Enabled = True
tbControlBar.Buttons("stop").Enabled = False
tbControlBar.Buttons("pause").Enabled = False
End If
End If
Exit Sub
ErrLine:
Err.Clear
Exit Sub
End Sub
' ******************************************************************************************************************************
' * procedure name: tmrTimer_Timer
' * procedure description: Occurs when a preset interval for a Timer control has elapsed.
' *
' ******************************************************************************************************************************
Private Sub tmrTimer_Timer()
Dim nReturnCode As Long
Dim dblPosition As Double
On Local Error GoTo ErrLine
'Retrieve the Elapsed Time and
'display it in the corresponding
'textbox.
If m_boolVideoRunning = True Then
'obtain return code
Call m_objMediaEvent.WaitForCompletion(100, nReturnCode)
If nReturnCode = 0 Then
'get the current position for display
dblPosition = m_objMediaPosition.CurrentPosition
txtElapsed.Text = CStr(Round(dblPosition, 2))
Else
txtElapsed.Text = CStr(Round(m_dblRunLength, 2))
'enable/disable control buttons
tbControlBar.Buttons("play").Enabled = True
tbControlBar.Buttons("stop").Enabled = False
tbControlBar.Buttons("pause").Enabled = False
m_boolVideoRunning = False
End If
End If
Exit Sub
ErrLine:
Err.Clear
Resume Next
Exit Sub
End Sub