⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nonddddme1.asm

📁 简单密码输入 编写一个简单的操作系统 简单的取系统时间小程序
💻 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -