第07章 图形操作 · 7.2 绘制图形(2)

fild _dwRadius fmul fsubp st(1),st fistp @dwReturn mov eax,@dwReturn ret _CalcY endp;####################################################################; 按照 _dwDegreeInc 的步进角度,画 _dwRadius 为半径的小圆点;####################################################################_DrawDot proc _hDC,_dwDegreeInc,_dwRadius local @dwNowDegree,@dwR local @dwX,@dwY mov @dwNowDegree,0 mov eax,dwRadius sub eax,10 mov @dwR,eax .while @dwNowDegree <= 360 finit;********************************************************************; 计算小圆点的圆心坐标;******************************************************************** 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值