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章 图形操作 · 7.3 创建和使用位图(1) 下页:第07章 图形操作 · 7.3 创建和使用位图(3)

第07章 图形操作

版权所有 © 云南伯恩科技 证书:粤ICP备09170368号