爱爱小说网 > 其他电子书 > windows环境下32位汇编语言程序设计 >

第34章

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

小说: windows环境下32位汇编语言程序设计 字数: 每页3500字

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




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

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

_DeleteBackGround   proc

 



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


第7章 图形操作


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

    
                invoke  DeleteDC;hDcBack

                invoke  DeleteDC;hDcClock

                invoke  DeleteObject;hBmpBack

                invoke  DeleteObject;hBmpClock

                ret

 

_DeleteBackGround   endp

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

_Init       proc

                local   @hBmpBack;@hBmpCircle

 

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

; 初始化菜单

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

                invoke  CreatePopupMenu

                mov     hMenu;eax

                invoke  AppendMenu;hMenu;0;IDM_BACK1;offset szMenuBack1

                invoke  AppendMenu;hMenu;0;IDM_BACK2;offset szMenuBack2

                invoke  AppendMenu;hMenu;MF_SEPARATOR;0;NULL

                invoke  AppendMenu;hMenu;0;IDM_CIRCLE1;offset szMenuCircle1

                invoke  AppendMenu;hMenu;0;IDM_CIRCLE2;offset szMenuCircle2

                invoke  AppendMenu;hMenu;MF_SEPARATOR;0;NULL

                invoke  AppendMenu;hMenu;0;IDM_EXIT;offset szMenuExit

                invoke  CheckMenuRadioItem;hMenu;IDM_BACK1;IDM_BACK2;

                        IDM_BACK1;NULL

                invoke  CheckMenuRadioItem;hMenu;IDM_CIRCLE1;IDM_CIRCLE2;

                        IDM_CIRCLE1;NULL

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

; 设置圆形窗口并设置“总在最前面”

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

                invoke  CreateEllipticRgn;0;0;CLOCK_SIZE+1;CLOCK_SIZE+1

                push        eax

                invoke  SetWindowRgn;hWinMain;eax;TRUE

                pop     eax

                invoke  DeleteObject;eax

                invoke  SetWindowPos;hWinMain;HWND_TOPMOST;0;0;0;0;

                        SWP_NOMOVE or SWP_NOSIZE

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

; 建立背景

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

                mov     dwNowBack;IDB_BACK1

                mov     dwNowCircle;IDB_CIRCLE1

                    invoke  _CreateBackGround

                    invoke  _CreateClockPic

                    invoke  SetTimer;hWinMain;ID_TIMER;1000;NULL

                    ret

 

_Init           endp

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

_Quit           proc

 

                invoke  KillTimer;hWinMain;ID_TIMER

                invoke  DestroyWindow;hWinMain

                invoke  PostQuitMessage;NULL

                invoke  _DeleteBackGround

                invoke  DestroyMenu;hMenu

                ret

 

_Quit           endp

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

_ProcWinMain        proc        uses ebx edi esi hWnd;uMsg;wParam;lParam

                    local   @stPS:PAINTSTRUCT

                local   @hDC

                local   @stPos:POINT

    

                mov     eax;uMsg

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

                。if     eax   WM_TIMER

                        invoke  _CreateClockPic

                        invoke  InvalidateRect;hWnd;NULL;FALSE

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

                。elseif eax   WM_PAINT

                        invoke  BeginPaint;hWnd;addr @stPS

                        mov @hDC;eax

                        mov eax;@stPS。rcPaint。right

                        sub eax;@stPS。rcPaint。left

                        mov ecx;@stPS。rcPaint。bottom

                        sub ecx;@stPS。rcPaint。top

                        invoke  BitBlt;@hDC;

                                @stPS。rcPaint。left;@stPS。rcPaint。top;

                                eax;ecx;hDcClock;@stPS。rcPaint。left;

                                @stPS。rcPaint。top;SRCCOPY

                        invoke  EndPaint;hWnd;addr @stPS

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

                。elseif eax   WM_CREATE

                        mov     eax;hWnd

                        mov     hWinMain;eax

                        invoke  _Init

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

                。elseif eax   WM_MAND

                        mov     eax;wParam

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

;由于印刷宽度的问题,影响源代码的缩进格式,请读者注意

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

。if         ax    IDM_BACK1

                mov     dwNowBack;IDB_BACK1

                invoke  CheckMenuRadioItem;hMenu;I

返回目录 上一页 下一页 回到顶部 2 2

你可能喜欢的