www.pudn.com > 孙媳妇.rar > Nonddddme1.asm
;---------------- ;编译模式="EXE" ;---------------- .386 .Model Flat, StdCall Option Casemap :None ;--------------------------------------------------------------------------- ;引用INC与LIB请不要包含路径 Include windows.inc Include user32.inc Include kernel32.inc include gdi32.inc includelib gdi32.lib IncludeLib user32.lib IncludeLib kernel32.lib include macro.asm ;--------------------------------------------------------------------------- ;使用INVOKE方式调用过程需要声明 WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD ;--------------------------------------------------------------------------- ;全局变量 .DATA szWindowsName DB "http://aogo.yeah.net",0 szClassName db "WinASM_Class",0 .DATA? hInstance DD ? hBit1 dd ? hBit2 dd ? hMemdc dd ? ;=========================================================================== ;代码开始 .CODE START: invoke GetModuleHandle,NULL mov hInstance, eax invoke GetCommandLine invoke WinMain,hInstance,NULL,eax,SW_SHOWDEFAULT invoke ExitProcess,0 ;--------------------------------------------------------------------------- WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD ; 声明过程变量(局部) LOCAL wc :WNDCLASSEX LOCAL msg :MSG local hWnd :HWND ;--------------------- mov wc.cbSize,sizeof WNDCLASSEX mov wc.style,CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW mov wc.lpfnWndProc,offset WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInst pop wc.hInstance mov wc.hbrBackground,COLOR_BTNFACE+1 mov wc.lpszMenuName,NULL mov wc.lpszClassName,offset szClassName invoke LoadIcon,hInst,100 ;这一行是在资源文件中加载ID为100的图标做为窗体的图标 mov wc.hIcon,eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor, eax mov wc.hIconSm, 0 invoke RegisterClassEx, ADDR wc invoke CreateWindowEx,NULL,ADDR szClassName,ADDR szWindowsName,WS_OVERLAPPEDWINDOW,200,200,500,200,NULL,NULL,hInst,NULL mov hWnd,eax ;invoke LoadMenu,hInst,600 ;读取菜单(如果有ID为600的菜单) ;invoke SetMenu,hWnd,eax ;显示菜单 invoke ShowWindow,hWnd,SW_SHOWNORMAL invoke UpdateWindow,hWnd StartLoop: invoke GetMessage,ADDR msg,NULL,0,0 cmp eax, 0 je ExitLoop invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg jmp StartLoop ExitLoop: mov eax,msg.wParam ret WinMain endp ;--------------------------------------------------------------------------- WndProc proc hWin:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD local ps:PAINTSTRUCT,buffer[100]:BYTE .if uMsg==WM_CREATE invoke GetDC,hWin mov ps.hdc,eax invoke CreateCompatibleDC,ps.hdc mov hMemdc,eax invoke ReleaseDC,hWin,ps.hdc ;接着,如果游戏中的一个图形不是图片是画的,创建N个图片画出图形.分别保存 ;图形1,大小自己去考虑 invoke CreateCompatibleBitmap,hMemdc,100,100 mov hBit1,eax invoke SelectObject,hMemdc,hBit1 ;画图形的代码: invoke Rectangle,hMemdc,0,0,100,100 invoke GetSysColorBrush,COLOR_BTNFACE invoke SelectObject,hMemdc,eax invoke Rectangle,hMemdc,20,20,80,80 ;画完后,图形会自动保存在图片上 ;创建第二个图片 invoke CreateCompatibleBitmap,hMemdc,100,100 mov hBit2,eax invoke SelectObject,hMemdc,hBit2 ;画图形的代码: invoke GetSysColorBrush,COLOR_BTNFACE invoke SelectObject,hMemdc,eax invoke Rectangle,hMemdc,0,0,100,100 invoke GetStockObject,WHITE_BRUSH invoke SelectObject,hMemdc,eax invoke Rectangle,hMemdc,20,20,80,80 ;画完后,图形会自动保存在图片上 ;循环创建所需要的图片.如果本身就是图片,只需要加载 ;... ... ;窗体创建 .elseif uMsg==WM_PAINT invoke BeginPaint,hWin,addr ps mov ps.hdc,eax ;根据游戏的信息画上这些图片,获得图片高宽可以使用GetObject invoke SelectObject,hMemdc,hBit1 invoke BitBlt,ps.hdc,0,0,100,100,hMemdc,0,0,SRCCOPY invoke SelectObject,hMemdc,hBit2 invoke BitBlt,ps.hdc,101,0,100,100,hMemdc,0,0,SRCCOPY invoke EndPaint,hWin,addr ps mov eax,0 ret .elseif uMsg == WM_COMMAND ret .elseif uMsg == WM_DESTROY invoke DeleteDC,hMemdc ;程序销毁 invoke PostQuitMessage,NULL ret .else invoke DefWindowProc,hWin,uMsg,wParam,lParam ret .endif xor eax,eax ret WndProc endp ;--------------------------------------------------------------------------- END START