WIN32汇编语言教程:第07章 图形操作 · 7.3 创建和使用位图(2)
local @dwX1,@dwY1,@dwX2,@dwY2 invoke _CalcX,_dwDegree,_dwRadius mov @dwX1,eax invoke _CalcY,_dwDegree,_dwRadius 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 ;#################################################################### _CreateClockPic proc local @stTime:SYSTEMTIME pushad invoke BitBlt,hDcClock,0,0,CLOCK_SIZE,CLOCK_SIZE,\ hDcBack,0,0,SRCCOPY ;******************************************************************** ; 画时钟指针 ;******************************************************************** invoke GetLocalTime,addr @stTime invoke CreatePen,PS_SOLID,1,0 push eax invoke SelectObject,hDcClock,eax movzx eax,@stTime.wSecond mov ecx,360/60 mul ecx ;秒针度数 = 秒 * 360/60 invoke _DrawLine,hDcClock,eax,60 pop eax invoke DeleteObject,eax ;******************************************************************** invoke CreatePen,PS_SOLID,2,0 push eax invoke SelectObject,hDcClock,eax movzx eax,@stTime.wMinute mov ecx,360/60 mul ecx ;分针度数 = 分 * 360/60 invoke _DrawLine,hDcClock,eax,55 pop eax invoke DeleteObject,eax ;******************************************************************** invoke CreatePen,PS_SOLID,3,0 push eax invoke SelectObject,hDcClock,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,hDcClock,eax,50 pop eax invoke DeleteObject,eax ;******************************************************************** popad ret _CreateClockPic endp ;#################################################################### _CreateBackGround proc local @hDc,@hDcCircle,@hDcMask local @hBmpBack,@hBmpCircle,@hBmpMask ;******************************************************************** ; 建立需要的临时对象 ;******************************************************************** invoke GetDC,hWinMain mov @hDc,eax invoke CreateCompatibleDC,@hDc mov hDcBack,eax invoke CreateCompatibleDC,@hDc mov hDcClock,eax invoke CreateCompatibleDC,@hDc mov @hDcCircle,eax invoke CreateCompatibleDC,@hDc mov @hDcMask,eax invoke CreateCompatibleBitmap,@hDc,CLOCK_SIZE,CLOCK_SIZE mov hBmpBack,eax invoke CreateCompatibleBitmap,@hDc,CLOCK_SIZE,CLOCK_SIZE mov hBmpClock,eax invoke ReleaseDC,hWinMain,@hDc invoke LoadBitmap,hInstance,dwNowBack mov @hBmpBack,eax invoke LoadBitmap,hInstance,dwNowCircle mov @hBmpCircle,eax mov eax,dwNowCircle inc eax invoke LoadBitmap,hInstance,eax mov @hBmpMask,eax invoke SelectObject,hDcBack,hBmpBack invoke SelectObject,hDcClock,hBmpClock invoke SelectObject,@hDcCircle,@hBmpCircle invoke SelectObject,@hDcMask,@hBmpMask ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;******************************************************************** ; 以背景图片填充 ;******************************************************************** invoke CreatePatternBrush,@hBmpBack push eax invoke SelectObject,hDcBack,eax invoke PatBlt,hDcBack,0,0,CLOCK_SIZE,CLOCK_SIZE,PATCOPY invoke DeleteObject,eax ;******************************************************************** ; 画钟面 ;******************************************************************** invoke BitBlt,hDcBack,0,0,CLOCK_SIZE,CLOCK_SIZE,\ @hDcMask,0,0,SRCAND invoke BitBlt,hDcBack,0,0,CLOCK_SIZE,CLOCK_SIZE,\ @hDcCircle,0,0,SRCPAINT ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ invoke DeleteDC,@hDcCircle invoke DeleteDC,@hDcMask invoke DeleteObject,@hBmpBack invoke DeleteObject,@hBmpCircle invoke DeleteObject,@hBmpMask ret _CreateBackGround endp ;#################################################################### _DeleteBackGround proc
第07章 图形操作
版权所有 © 云南伯恩科技 证书:粤ICP备09170368号