《windows环境下32位汇编语言程序设计》

下载本书

添加书签

windows环境下32位汇编语言程序设计- 第41部分


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!

IDM_EXIT            equ     104

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; 数据段

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

                    。data?

hInstance       dd          ?

hWinMain            dd          ?

hCursorMove     dd          ?   ;Cursor when move

hCursorMain     dd          ?   ;Cursor when normal

hMenu           dd          ?

hBmpBack            dd          ?

hDcBack         dd          ?

hBmpClock       dd          ?

hDcClock            dd          ?

dwNowBack       dd          ?

dwNowCircle     dd          ?

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

                    nst

szClassName     db      'Clock';0

dwPara180       dw      180

dwRadius            dw      CLOCK_SIZE/2

szMenuBack1     db      '使用格子背景(&A)';0

szMenuBack2     db      '使用花布背景(&B)';0

szMenuCircle1   db      '使用淡蓝色边框(&C)';0

szMenuCircle2   db      '使用粉红色边框(&D)';0

szMenuExit      db      '退出(&X)。。。';0

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; 代码段

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

                    de

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; 计算时钟圆周上某个角度对应的 X 坐标

; X = 圆心X + Sin(角度) * 半径

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

_CalcX          proc        _dwDegree;_dwRadius

                    local   @dwReturn

 

                    fild        dwRadius

                    fild        _dwDegree

                    fldpi

                    fmul                    ;角度*Pi

                    fild        dwPara180

                    fdivp   st(1);st        ;角度*Pi/180

                    fsin                    ;Sin(角度*Pi/180)

                    fild        _dwRadius

                    fmul                    ;半径*Sin(角度*Pi/180)

                    fadd                    ;X+半径*Sin(角度*Pi/180)

                    fistp   @dwReturn

                    mov     eax;@dwReturn

                    ret

 

_CalcX          endp

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; 计算时钟圆周上某个角度对应的 Y 坐标

; Y = 圆心Y … Cos(角度) * 半径

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

_CalcY      proc        _dwDegree;_dwRadius

                local   @dwReturn

 

                fild        dwRadius

                fild        _dwDegree

                fldpi

                fmul

                fild        dwPara180

                fdivp   st(1);st

                fcos

                fild        _dwRadius

                fmul

                fsubp   st(1);st

                fistp   @dwReturn

                mov     eax;@dwReturn

                ret

 

_CalcY      endp

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; 画 _dwDegree 角度的线条,半径=_dwRadius

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

_DrawLine   proc        _hDC;_dwDegree;_dwRadius



 
来源:电子工业出版社 作者:罗云彬 上一页         回书目         下一页          
上一页         回书目         下一页          
  


第7章 图形操作


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  CreatepatibleDC;@hDc

                mov     hDcBack;eax

                invoke  CreatepatibleDC;@hDc

                mov     hDcClock;eax

                invoke  CreatepatibleDC;@hDc

                mov     @hDcCircle;eax

                invoke  CreatepatibleDC;@hDc

                mov     @hDcMask;eax

                invoke  CreatepatibleBitmap;@hDc;CLOCK_SIZE;CLOCK_SIZE

                mov     hBmpBack;eax

                invoke  CreatepatibleBitmap;@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  
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架