首页
社区
课程
招聘
[求助]问个WIN32中绘制时钟的小问题
发表于: 2008-1-7 19:35 4076

[求助]问个WIN32中绘制时钟的小问题

2008-1-7 19:35
4076
问个WIN32汇编"第7章 图形操作"中的绘制时钟的小问题

; 计算时钟的位置、大小等参数
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_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

请教,谢谢!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
忘了,还有这个子程序
; 计算时钟圆周上某个角度对应的 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

这些指令fild,fldpi,fmul,fdivp,fsin我在DOS下没见过,而且WIN32汇编那本书之前也没提过,不清楚,麻烦解释一下,谢谢
2008-1-7 19:45
0
雪    币: 207
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
右移1位等于除以2,那些指令你可以去搜索一下“奔腾指令速查手册”
2008-1-7 20:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
奔腾指令速查手册

麻烦哪里有?
最好要有中文解释的
请给个地址下一下,谢谢了
2008-1-9 20:33
0
游客
登录 | 注册 方可回帖
返回
//