Files
Client/Library/dxx8/samples/Multimedia/VBSamples/DirectInput/Scrawl/scrawlb.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

201 lines
5.6 KiB
Plaintext

VERSION 5.00
Begin VB.Form frmCanvas
AutoRedraw = -1 'True
BackColor = &H80000005&
Caption = "Visual Basic Scrawl Sample"
ClientHeight = 6150
ClientLeft = 165
ClientTop = 450
ClientWidth = 9990
Icon = "ScrawlB.frx":0000
LinkTopic = "Form1"
ScaleHeight = 410
ScaleMode = 3 'Pixel
ScaleWidth = 666
StartUpPosition = 2 'CenterScreen
Begin VB.Image imgPencil
Appearance = 0 'Flat
Height = 480
Left = 840
Picture = "ScrawlB.frx":0442
Top = 600
Width = 480
End
Begin VB.Menu mnuContext
Caption = "none"
Visible = 0 'False
Begin VB.Menu mnuSpeed1
Caption = "Speed 1"
End
Begin VB.Menu mnuSpeed2
Caption = "Speed 2"
End
Begin VB.Menu mnuSpeed3
Caption = "Speed 3"
End
Begin VB.Menu Sep1
Caption = "-"
End
Begin VB.Menu mnuClear
Caption = "Clear"
End
Begin VB.Menu Sep2
Caption = "-"
End
Begin VB.Menu mnuSuspend
Caption = "Suspend"
End
Begin VB.Menu mnuExit
Caption = "Exit"
End
End
End
Attribute VB_Name = "frmCanvas"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Implements DirectXEvent
Dim Suspended As Boolean
Private Sub DirectXEvent_DXCallback(ByVal eventid As Long)
Dim diDeviceData(1 To BufferSize) As DIDEVICEOBJECTDATA
Dim NumItems As Integer
Dim i As Integer
Dim windowRect As RECT
Static OldSequence As Long
On Error GoTo INPUTLOST
NumItems = objDIDev.GetDeviceData(diDeviceData, 0)
For i = 1 To NumItems
Select Case diDeviceData(i).lOfs
Case DIMOFS_X
g_cursorx = g_cursorx + diDeviceData(i).lData * g_Sensitivity
' We don't want to update the cursor or draw a line is response to
' separate axis movements, or we will get a staircase instead of diagonal lines.
' A diagonal movement of the mouse results in two events with the same sequence number.
If OldSequence <> diDeviceData(i).lSequence Then
UpdateCursor
End If
OldSequence = diDeviceData(i).lSequence
Case DIMOFS_Y
g_cursory = g_cursory + diDeviceData(i).lData * g_Sensitivity
If OldSequence <> diDeviceData(i).lSequence Then
UpdateCursor
End If
OldSequence = diDeviceData(i).lSequence
Case DIMOFS_BUTTON0
If diDeviceData(i).lData And &H80 Then
Drawing = True
CurrentX = g_cursorx
CurrentY = g_cursory
Else
Drawing = False
End If
Case DIMOFS_BUTTON1
If diDeviceData(i).lData = 0 Then ' button up
objDIDev.Unacquire
' Get the system cursor into the same position as the private cursor
Call GetWindowRect(hwnd, windowRect)
Call SetCursorPos(g_cursorx + windowRect.Left, g_cursory + windowRect.Top)
' Pop up menu at that position
Call PopupMenu(mnuContext)
End If
End Select
Next i
Exit Sub
INPUTLOST:
' Since no events are signalled if the device is not acquired, this can only happen
' if the device is lost between signalling and retrieval.
If Err.Number = DIERR_INPUTLOST Then
objDIDev.Acquire
Else
Exit Sub
End If
End Sub
Public Sub UpdateCursor()
If g_cursorx < 1 Then g_cursorx = 1
If g_cursorx >= Canvas.ScaleWidth Then g_cursorx = Canvas.ScaleWidth - 1
If g_cursory < 1 Then g_cursory = 1
If g_cursory >= Canvas.ScaleHeight Then g_cursory = Canvas.ScaleHeight - 1
Canvas.imgPencil.Left = g_cursorx
Canvas.imgPencil.Top = g_cursory
If Drawing Then
Line -(g_cursorx, g_cursory)
End If
End Sub
Private Sub Form_Click()
' Allow user to resume drawing after suspending
Suspended = False
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
' This is a bit of a kludge. We need a way to force acquisition of the mouse whenever
' the context menu is closed, whenever we switch back to the application, or in any other
' circumstance where Windows is finished with the cursor. If a MouseMove event happens,
' we know the cursor is in our app window and Windows is generating mouse messages, therefore
' it's time to reacquire.
' Note: this event appears to happen even when there's no mouse activity, e.g. we have just
' Alt+Tabbed back, or cancelled out of the context menu with the Esc key.
If Suspended Then Exit Sub ' Allow use of Windows cursor
On Error Resume Next
objDIDev.Acquire
End Sub
Private Sub mnuClear_Click()
Cls
End Sub
Private Sub mnuExit_Click()
End
End Sub
Private Sub mnuSpeed1_Click()
g_Sensitivity = 1
mnuSpeed1.Checked = True
mnuSpeed2.Checked = False
mnuSpeed3.Checked = False
objDIDev.Acquire
End Sub
Private Sub mnuSpeed2_Click()
g_Sensitivity = 2
mnuSpeed2.Checked = True
mnuSpeed1.Checked = False
mnuSpeed3.Checked = False
objDIDev.Acquire
End Sub
Private Sub mnuSpeed3_Click()
g_Sensitivity = 3
mnuSpeed3.Checked = True
mnuSpeed1.Checked = False
mnuSpeed2.Checked = False
objDIDev.Acquire
End Sub
Private Sub mnuSuspend_Click()
Suspended = True
objDIDev.Unacquire
End Sub