-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathPaint.asm
More file actions
executable file
·209 lines (151 loc) · 3.7 KB
/
Copy pathPaint.asm
File metadata and controls
executable file
·209 lines (151 loc) · 3.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
; ¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*
; ¤ Game Tic-tac-toe - created by PB ¤
; ¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*¤*
.386
.model flat, stdcall
option casemap:none
include TicTacToe.inc
.code
Paint_Proc proc hWin:DWORD, hDC:DWORD
LOCAL btn_hi:DWORD
LOCAL btn_lo:DWORD
LOCAL Rct:RECT
invoke GetSysColor, COLOR_BTNHIGHLIGHT
mov btn_hi, eax
invoke GetSysColor, COLOR_BTNSHADOW
mov btn_lo, eax
; draw a frame around buttons
invoke Frame3D, hDC, btn_lo, btn_hi, 277, 175, 423, 270, 2
; draw window frame on the left
invoke Frame3D, hDC, btn_lo, btn_hi, 10, 10, 270, 270, 2
; draw edges around window workspace
invoke GetClientRect, hWin, ADDR Rct
add Rct.left, 0
add Rct.top, 0
sub Rct.right, 0
sub Rct.bottom, 0
invoke Frame3D, hDC, btn_lo, btn_hi, Rct.left, Rct.top, Rct.right, Rct.bottom, 2
add Rct.left, 5
add Rct.top, 5
sub Rct.right, 5
sub Rct.bottom, 5
invoke Frame3D, hDC, btn_hi, btn_lo, Rct.left, Rct.top, Rct.right, Rct.bottom, 2
invoke DrawBoardG, hDC
ret
Paint_Proc endp
Frame3D proc hDC:DWORD, btn_hi:DWORD, btn_lo:DWORD, tx:DWORD, ty:DWORD, lx:DWORD, ly:DWORD, bdrWid:DWORD
LOCAL hPen:DWORD
LOCAL hPen2:DWORD
LOCAL hpenOld:DWORD
invoke CreatePen, 0, 1, btn_hi
mov hPen, eax
invoke SelectObject, hDC, hPen
mov hpenOld, eax
push tx
push ty
push lx
push ly
push bdrWid
lp1:
invoke MoveToEx, hDC, tx, ty, NULL
invoke LineTo, hDC, lx, ty
invoke MoveToEx, hDC, tx, ty, NULL
invoke LineTo, hDC, tx, ly
dec tx
dec ty
inc lx
inc ly
dec bdrWid
cmp bdrWid, 0
je lp1Out
jmp lp1
lp1Out:
invoke CreatePen, 0, 1, btn_lo
mov hPen2, eax
invoke SelectObject, hDC, hPen2
mov hPen, eax
invoke DeleteObject, hPen
pop bdrWid
pop ly
pop lx
pop ty
pop tx
lp2:
invoke MoveToEx, hDC, tx, ly, NULL
invoke LineTo, hDC, lx, ly
invoke MoveToEx, hDC, lx, ty, NULL
inc ly
invoke LineTo, hDC, lx, ly
dec ly
dec tx
dec ty
inc lx
inc ly
dec bdrWid
cmp bdrWid, 0
je lp2Out
jmp lp2
lp2Out:
invoke SelectObject, hDC, hpenOld
invoke DeleteObject, hPen2
ret
Frame3D endp
DrawBoardG proc hDC:DWORD
LOCAL hBlueBrush:DWORD
LOCAL hBluePen:DWORD
LOCAL htime:DWORD
LOCAL x1:DWORD
LOCAL x2:DWORD
LOCAL y1:DWORD
LOCAL y2:DWORD
invoke CreatePen, PS_SOLID, 3, 00FF0000h
mov hBluePen, eax
invoke SelectObject, hDC, hBluePen
push eax
mov x1, 20
mov x2, 20
mov y1, 20
mov y2, 260
mov htime, 4
lp1:
invoke MoveToEx, hDC, x1, x2, NULL
invoke LineTo, hDC, y1, y2
mov eax, x1
add eax, 80
mov x1, eax
mov eax, y1
add eax, 80
mov y1, eax
dec htime
cmp htime, 0
je lp1Out
jmp lp1
lp1Out:
mov x1, 20
mov x2, 20
mov y1, 260
mov y2, 20
mov htime, 4
lp2:
invoke MoveToEx, hDC, x1, x2, NULL
invoke LineTo, hDC, y1, y2
mov eax, x2
add eax, 80
mov x2, eax
mov eax, y2
add eax, 80
mov y2, eax
dec htime
cmp htime, 0
je lp2Out
jmp lp2
lp2Out:
invoke DeleteObject, hBlueBrush
invoke DeleteObject, hBluePen
pop eax
invoke SelectObject, hDC, eax
pop eax
invoke SelectObject, hDC, eax
ret
DrawBoardG endp
end