友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
八万小说网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

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

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




hWinMain                dd      ?

dwCenterX           dd      ?       ;圆心X

dwCenterY           dd      ?       ;圆心Y

dwRadius                dd      ?       ;半径

                        nst

szClassName         db      'Clock';0

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

; 代码段

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

                        de

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

; 计算时钟的位置、大小等参数

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

_CalcClockParam     proc

                        local   @stRect:RECT

 

                        invoke  GetClientRect;hWinMain;addr @stRect

                        mov     eax;@stRect。right

                        sub     eax;@stRect。left        ;eax = 宽度

                        mov     ecx;@stRect。bottom

                        sub     ecx;@stRect。top     ;ecx = 高度

;********************************************************************

; 比较客户区宽度和高度,以小的值用做时钟的直径

;********************************************************************

                        。if     ecx 》 eax

                                mov     edx;eax     ;高度 》 宽度

                                sub     ecx;eax

                                shr     ecx;1

                                mov     dwCenterX;0

                                mov     dwCenterY;ecx

                        。else

                                mov     edx;ecx

                                sub     eax;ecx

                                shr     eax;1

                                mov     dwCenterX;eax

                                mov     dwCenterY;0

                        。endif

                        shr     edx;1

                        mov     dwRadius;edx

                        add     dwCenterX;edx

                        add     dwCenterY;edx

                        ret

 

_CalcClockParam     endp

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

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

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

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

_dwPara180          dw      180

_CalcX              proc        _dwDegree;_dwRadius

                        local   @dwReturn

 

                        fild        dwCenterX

                        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        dwCenterY

                        fild        _dwDegree

                        fldpi

                        fmul

                        fild        _dwPara180

                        fdivp   st(1);st

                        fcos



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


第7章 图形操作


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 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; 画 _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

;********************************************************************

; 注册窗口类

;********************************************************************

         
返回目录 上一页 下一页 回到顶部 7 6
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!