太子爷小说网 > 杂集电子书 > windows环境下32位汇编语言程序设计 >

第42节

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

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

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




                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;IDM_BACK1;IDM_BACK2;IDM_BACK1;NULL

。elseif     ax    IDM_BACK2

                mov     dwNowBack;IDB_BACK2

                invoke  CheckMenuRadioItem;hMenu;IDM_BACK1;IDM_BACK2;IDM_BACK2;NULL

。elseif     ax    IDM_CIRCLE1

                mov     dwNowCircle;IDB_CIRCLE1

                invoke  CheckMenuRadioItem;hMenu;IDM_CIRCLE1;IDM_CIRCLE2;

                        IDM_CIRCLE1;NULL

。elseif     ax    IDM_CIRCLE2

                mov     dwNowCircle;IDB_CIRCLE2

                invoke  CheckMenuRadioItem;hMenu;IDM_CIRCLE1;IDM_CIRCLE2;

                        IDM_CIRCLE2;NULL

。elseif     ax    IDM_EXIT

        call        _Quit

        xor     eax;eax

        ret

。endif

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

; 恢复源代码缩进格式

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

                    invoke  _DeleteBackGround

                    invoke  _CreateBackGround

                    invoke  _CreateClockPic

                    invoke  InvalidateRect;hWnd;NULL;FALSE

            。elseif eax   WM_CLOSE

                    call        _Quit

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

; 按下右键时弹出一个POPUP菜单

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

            。elseif eax   WM_RBUTTONDOWN

                    invoke  GetCursorPos;addr @stPos

                    invoke  TrackPopupMenu;hMenu;TPM_LEFTALIGN;

                            @stPos。x;@stPos。y;NULL;hWnd;NULL

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

; 由于没有标题栏,下面代码用于按下左键时移动窗口

; UpdateWindow:即时刷新,否则要等到放开鼠标时窗口才会重画



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


第7章 图形操作


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

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

            。elseif eax   WM_LBUTTONDOWN

                    invoke  SetCursor;hCursorMove

                    invoke  UpdateWindow;hWnd

                    invoke  ReleaseCapture

                        invoke   SendMessage;hWnd;WM_NCLBUTTONDOWN;HTCAPTION;0

                    invoke  SetCursor;hCursorMain

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

            。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

                invoke  LoadCursor;hInstance;IDC_MOVE

                mov     hCursorMove;eax

                invoke  LoadCursor;hInstance;IDC_MAIN

                mov     hCursorMain;eax

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

; 注册窗口类

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

                invoke  RtlZeroMemory;addr @stWndClass;sizeof @stWndClass

                invoke  LoadIcon;hInstance;ICO_MAIN

                mov     @stWndClass。hIcon;eax

                mov     @stWndClass。hIconSm;eax

                push        hCursorMain

                pop     @stWndClass。hCursor

                push        hInstance

                pop     @stWndClass。hInstance

                mov     @stWndClass。cbSize;sizeof WNDCLASSEX

                mov     @stWndClass。style;CS_HREDRAW or CS_VREDRAW

                mov     @stWndClass。lpfnWndProc;offset _ProcWinMain

                mov     @stWndClass。hbrBackground;COLOR_W

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

你可能喜欢的