按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
invoke _CalcX;@dwNowDegree;@dwR
mov @dwX;eax
invoke _CalcY;@dwNowDegree;@dwR
mov @dwY;eax
mov eax;@dwX ;画点
mov ebx;eax
mov ecx;@dwY
mov edx;ecx
sub eax;_dwRadius
add ebx;_dwRadius
sub ecx;_dwRadius
add edx;_dwRadius
invoke Ellipse;_hDC;eax;ecx;ebx;edx
mov eax;_dwDegreeInc
add @dwNowDegree;eax
。endw
ret
_DrawDot endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 画 _dwDegree 角度的线条,半径=时钟半径…参数_dwRadiusAdjust
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_DrawLine proc _hDC;_dwDegree;_dwRadiusAdjust
local @dwR
local @dwX1;@dwY1;@dwX2;@dwY2
mov eax;dwRadius
sub eax;_dwRadiusAdjust
mov @dwR;eax
;********************************************************************
; 计算线条两端的坐标
;********************************************************************
invoke _CalcX;_dwDegree;@dwR
mov @dwX1;eax
invoke _CalcY;_dwDegree;@dwR
mov @dwY1;eax
add _dwDegree;180
invoke _CalcX;_dwDegree;10
mov @dwX2;eax
invoke _CalcY;_dwDegree;10
mov @dwY2;eax
invoke MoveToEx;_hDC;@dwX1;@dwY1;NULL
invoke LineTo;_hDC;@dwX2;@dwY2
ret
_DrawLine endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_ShowTime proc _hWnd;_hDC
local @stTime:SYSTEMTIME
pushad
invoke GetLocalTime;addr @stTime
invoke _CalcClockParam
;********************************************************************
; 画时钟圆周上的点
;********************************************************************
invoke GetStockObject;BLACK_BRUSH
invoke SelectObject;_hDC;eax
invoke _DrawDot;_hDC;360/12;3 ;画12个大圆点
invoke _DrawDot;_hDC;360/60;1 ;画60个小圆点
;********************************************************************
; 画时钟指针
;********************************************************************
invoke CreatePen;PS_SOLID;1;0
invoke SelectObject;_hDC;eax
invoke DeleteObject;eax
movzx eax;@stTime。wSecond
mov ecx;360/60
mul ecx ;秒针度数 = 秒 * 360/60
invoke _DrawLine;_hDC;eax;15
;********************************************************************
invoke CreatePen;PS_SOLID;2;0
invoke SelectObject;_hDC;eax
invoke DeleteObject;eax
movzx eax;@stTime。wMinute
mov ecx;360/60
mul ecx ;分针度数 = 分 * 360/60
invoke _DrawLine;_hDC;eax;20
;********************************************************************
invoke CreatePen;PS_SOLID;3;0
invoke SelectObject;_hDC;eax
invoke DeleteObject;eax
movzx eax;@stTime。wHour
。if eax 》= 12
sub eax;12
。endif
mov ecx;360/12
mul ecx
movzx ecx;@stTime。wMinute
shr ecx;1
add eax;ecx
invoke _DrawLine;_hDC;eax;30
;********************************************************************
popad
ret
_ShowTime endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_ProcWinMain proc uses ebx edi esi hWnd;uMsg;wParam;lParam
local @stPS:PAINTSTRUCT
mov eax;uMsg
。if eax WM_TIMER
invoke InvalidateRect;hWnd;NULL;TRUE
。elseif eax WM_PAINT
invoke BeginPaint;hWnd;addr @stPS
invoke _ShowTime;hWnd;eax
来源:电子工业出版社 作者:罗云彬 上一页 回书目 下一页
上一页 回书目 下一页
第7章 图形操作
7。2 绘 制 图 形(3)
invoke EndPaint;hWnd;addr @stPS
。elseif eax WM_CREATE
invoke SetTimer;hWnd;ID_TIMER;1000;NULL
;********************************************************************
。elseif eax WM_CLOSE
invoke KillTimer;hWnd;ID_TIMER
invoke DestroyWindow;hWinMain
invoke PostQuitMessage;NULL
;********************************************************************
。else
invoke DefWindowProc;hWnd;uMsg;wParam;lParam
ret
。endif
;********************************************************************
xor eax;eax
ret
_ProcWinMain endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_WinMain proc
local @stWndClass:WNDCLASSEX
local @stMsg:MSG
invoke GetModuleHandle;NULL
mov hInstance;eax
;********************************************************************
; 注册窗口类
;********************************************************************