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

windows环境下32位汇编语言程序设计-第52章

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




    invoke  GetROP2,hDC



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


第7章 图形操作


7。3 创建和使用位图(1)

    
7。2节探讨了绘制图形的一些函数,虽然绘图操作是图形程序必不可少的一部分,但丰富多彩的界面大部分还是靠设计精美的位图来铺成的,而不是靠绘图函数一点点画出来的。在大部分程序中,使用预先设计好的位图是最普遍的做法,在这一节中,将讨论如何使用位图,并在下一节中讨论使用块传送函数对位图进行操作。

7。3。1  一个使用位图的时钟例子

本节使用另一个时钟的例子,这个时钟的背景和边框用位图组成,程序中有两套背景图片和两套边框图片可供自由选择,图7。9显示了几种不同组合下的时钟外形,最右边的是在时钟上面按下右键弹出的选择菜单。


图7。9  BmpClock时钟程序的运行结果

程序的源代码可以在所附光盘的Chapter07BmpClock目录中找到,包括汇编源程序BmpClock。asm、资源脚本文件BmpClock。rc和一些图片。

BmpClock。rc源文件如下,中间定义了一些程序中要使用的位图:

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#include        

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#define ICO_MAIN           100

#define IDC_MAIN           100

#define IDC_MOVE           101

#define IDB_BACK1          100

#define IDB_CIRCLE1            101

#define IDB_BACK2          103

#define IDB_CIRCLE2            104

#define IDB_MASK2          105

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

ICO_MAIN            ICON            〃Main。ico〃

IDC_MAIN            CURSOR      〃Main。cur〃

IDC_MOVE            CURSOR      〃Move。cur〃

IDB_BACK1       BITMAP      〃Back1。bmp〃

IDB_CIRCLE1     BITMAP      〃Circle1。bmp〃

IDB_MASK1       BITMAP      〃Mask1。bmp〃

IDB_BACK2       BITMAP      〃Back2。bmp〃

IDB_CIRCLE2     BITMAP      〃Circle2。bmp〃

IDB_MASK2       BITMAP      〃Mask2。bmp〃

汇编源程序BmpClock。asm程序如下:

                    。386

                    。model flat; stdcall

                    option casemap :none

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

; Include 文件定义

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

include         windows。inc

include         user32。inc

includelib      user32。lib

include         kernel32。inc

includelib      kernel32。lib

include         Gdi32。inc

includelib      Gdi32。lib

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

; Equ 等值定义

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

CLOCK_SIZE      equ     150

ICO_MAIN            equ     100

IDC_MAIN            equ     100

IDC_MOVE            equ     101

IDB_BACK1       equ     100

IDB_CIRCLE1     equ     101

IDB_MASK1       equ     102

IDB_BACK2       equ     103

IDB_CIRCLE2     equ     104

IDB_MASK2       equ     105

ID_TIMER            equ     1

IDM_BACK1       equ     100

IDM_BACK2       equ     101

IDM_CIRCLE1     equ     102

IDM_CIRCLE2     equ     103

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

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