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