********************************************************** invoke BitBlt,@hDC,0,0,@stBmp.bmWidth,@stBmp.bmHeight,\ @hBmpDC,0,0,SRCCOPY invoke DeleteDC,@hBmpDC invoke ReleaseDC,hWnd,@hDC invoke InvalidateRect,hWnd,NULL,-1
ret
_SetWindowShape endp ;******************************************************************** ; 将窗口移动到屏幕中间 ; 参数:窗口句柄 ;******************************************************************** _CenterWindow proc hWnd:DWORD local @stRectDeskTop:RECT,@stRectWin:RECT local @dwWidth:DWORD,@dwHeight:DWORD
invoke GetWindowRect,hWnd,addr @stRectWin invoke GetDesktopWindow mov ebx,eax invoke GetWindowRect,ebx,addr @stRectDeskTop
mov eax,@stRectWin.bottom sub eax,@stRectWin.top mov @dwHeight,eax mov eax,@stRectWin.right sub eax,@stRectWin.left mov @dwWidth,eax
mov ebx,@stRectDeskTop.bottom sub ebx,@dwHeight shr ebx,1 mov ecx,@stRectDeskTop.right sub ecx,@dwWidth shr ecx,1
invoke MoveWindow,hWnd,ecx,ebx,@dwWidth,@dwHeight,FALSE ret
_CenterWindow endp ;******************************************************************** include About.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 程序开始 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start: call _WinMain invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 主窗口程序 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _WinMain proc local @stWcMain:WNDCLASSEX local @stMsg:MSG
invoke InitCommonControls invoke GetModuleHandle,NULL mov hInstance,eax invoke LoadIcon,hInstance,IDI_MAIN mov hIcon,eax invoke LoadMenu,hInstance,IDM_MAIN invoke GetSubMenu,eax,0 ;PopUp 菜单要用到子菜单 mov hMenu,eax ;*************** 注册窗口类 ***************************************** invoke LoadCursor,0,IDC_ARROW mov @stWcMain.hCursor,eax mov @stWcMain.cbSize,sizeof WNDCLASSEX mov @stWcMain.hIconSm,0 mov @stWcMain.style,CS_HREDRAW or CS_VREDRAW mov @stWcMain.lpfnWndProc,offset WndMainProc mov @stWcMain.cbClsExtra,0 mov @stWcMain.cbWndExtra,0 mov eax,hInstance mov @stWcMain.hInstance,eax mov @stWcMain.hIcon,0 mov @stWcMain.hbrBackground,COLOR_WINDOW + 1 mov @stWcMain.lpszClassName,offset szClassName mov @stWcMain.lpszMenuName,0 invoke RegisterClassEx,addr @stWcMain ;***************** 建立输出窗口 ***************************************** ; 属性:没有标题栏,不显示在任务栏 ;******************************************************************** invoke CreateWindowEx,WS_EX_TOOLWINDOW,\ offset szClassName,NULL,\ WS_POPUP or WS_SYSMENU,\ 0,0,1,1,\ NULL,NULL,hInstance,NULL
invoke ShowWindow,hWinMain,SW_SHOWNORMAL invoke UpdateWindow,hWinMain ;*************** 消息循环 ******************************************* .while TRUE invoke GetMessage,addr @stMsg,NULL,0,0 .break .if eax == 0 invoke TranslateMessage,addr @stMsg invoke DispatchMessage,addr @stMsg .endw ret
_WinMain endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> WndMainProc proc uses ebx edi esi, \ hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD local @stPos:POINT local @stPs:PAINTSTRUCT,@hDC:DWORD
mov eax,uMsg .if eax == WM_CREATE mov eax,hWnd mov hWinMain,eax call _Init ;******************************************************************** .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,\ hDcBack,@stPs.rcPaint.left,@stPs.rcPaint.top,SRCCOPY
invoke EndPaint,hWnd,addr @stPs ;******************************************************************** ; 由于没有菜单,下面代码用于按下右键时弹出POPUP菜单 ;******************************************************************** .elseif eax == WM_RBUTTONDOWN .if wParam == MK_RBUTTON invoke GetCursorPos,addr @stPos invoke TrackPopupMenu,hMenu,TPM_LEFTALIGN,@stPos.x,@stPos.y,NULL,hWnd,NULL .endif ;******************************************************************** ; 由于没有标题栏,下面代码用于按下左键时移动窗口 ;******************************************************************** .elseif eax == WM_LBUTTONDOWN invoke UpdateWindow,hWnd ;即时刷新 invoke ReleaseCapture invoke SendMessage,hWnd,WM_NCLBUTTONDOWN,HTCAPTION,0 ;******************************************************************** .elseif eax == WM_COMMAND .if lParam == 0 mov eax,wParam .if ax == IDM_EXIT call _Quit .elseif ax == IDM_ABOUT invoke DialogBoxParam,hInstance,DLG_ABOUT,hWnd,offset AboutDialogProc,DLG_ABOUT .endif .endif ;******************************************************************** .elseif eax == WM_CLOSE call _Quit ;******************************************************************** .else invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .endif ;******************************************************************** ; 注意:WndProc 处理 Windows 消息后,必须在 Eax 中返回 0 ; 但是由 DefWindowProc 处理后的返回值不能改变,否则窗口 ; 将无法显示! ;******************************************************************** xor eax,eax ret
WndMainProc endp
;******************************************************************** _Init proc local @hDC
invoke SendMessage,hWinMain,WM_SETTEXT,0,offset szClassName invoke SendMessage,hWinMain,WM_SETICON,ICON_SMALL,hIcon
invoke LoadBitmap,hInstance,IDB_0 ;装入背景图片 mov hBmpBack,eax invoke _SetWindowShape,hWinMain,hBmpBack ;设置窗口形状为背景图片 invoke GetDC,hWinMain mov @hDC,eax invoke CreateCompatibleDC,@hDC ;建立背景及数字 DC mov hDcBack,eax invoke ReleaseDC,hWinMain,@hDC invoke SelectObject,hDcBack,hBmpBack invoke _CenterWindow,hWinMain
ret
_Init endp ;******************************************************************** _Quit proc local @stWindow:RECT
invoke DestroyMenu,hMenu invoke DeleteDC,hDcBack invoke DeleteObject,hBmpBack invoke DestroyWindow,hWinMain invoke PostQuitMessage,NULL
上一页 [1] [2] [3] 下一页 |