📄 4.asm
字号:
.386
.model flat, stdcall
option casemap :none ;case sensitive
include \masm32\include\windows.inc ;系统常量定义
include \masm32\include\kernel32.inc ;使用的多个API声明在该文件
include \masm32\include\user32.inc ;使用的多个API声明在该文件
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
;定义的过程声明
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.data ;数据区
szDisplayName db "3D Frames",0
szClassName db "Template_Class",0
CommandLine dd 0
hWnd dd 0
hInstance dd 0
.code ;代码区
start:
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke GetCommandLine
mov CommandLine, eax
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,eax
;###################################################################
WinMain proc hInst :DWORD,
hPrevInst :DWORD,
CmdLine :DWORD,
CmdShow :DWORD
;声明局部变量
LOCAL wc :WNDCLASSEX ;窗口类结构
LOCAL msg :MSG ;消息结构
LOCAL Wwd :DWORD ;窗口宽度(像素为单位)
LOCAL Wht :DWORD ;窗口高度
LOCAL Wtx :DWORD ;窗口横坐标(左上角为0点,从左向右)
LOCAL Wty :DWORD ;窗口纵坐标(从上向下)
;填充窗口类结构变量
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
mov eax,hInst
mov wc.hInstance, eax ;填写实例句柄
mov wc.hbrBackground, COLOR_BTNFACE+1 ;窗口背景颜色
mov wc.lpszMenuName, NULL ;菜单名,无
mov wc.lpszClassName, offset szClassName ;窗口类名
invoke LoadIcon,hInst,500 ;装载图标
mov wc.hIcon, eax
jmp _SetAni
Mouse db "aa.ani",0
_SetAni:
invoke LoadCursorFromFile,ADDR Mouse
mov wc.hCursor, eax ;装载光标
mov wc.hIconSm, 0 ;小光标
invoke RegisterClassEx, ADDR wc ;用窗口类结构变量注册窗口
;按下面大小和位置建立窗口
mov Wwd, 500
mov Wht, 350
mov Wtx, 300
mov Wty, 200
invoke CreateWindowEx,WS_EX_LEFT,ADDR szClassName, ADDR szDisplayName,\
WS_OVERLAPPEDWINDOW,Wtx,Wty,Wwd,Wht,NULL,NULL, hInst,NULL ;建立窗口
mov hWnd,eax
invoke ShowWindow,hWnd,SW_SHOWNORMAL ;按正常大小显示窗口
invoke UpdateWindow,hWnd ;刷新窗口客户区
;消息循环
StartLoop:
invoke GetMessage,ADDR msg,NULL,0,0 ;从消息队列中获取本程序的消息到结构msg
cmp eax, 0 ;GetMessage接收到消息WM_QUIT,返回0
je ExitLoop
invoke TranslateMessage, ADDR msg ;转换键盘消息
invoke DispatchMessage, ADDR msg ;分发消息到窗口消息处理过程WndProc
jmp StartLoop
ExitLoop:
mov eax,msg.wParam
ret
WinMain endp
;窗口消息处理过程
WndProc proc hWin :DWORD,
uMsg :DWORD,
wParam :DWORD,
lParam :DWORD
.if uMsg == WM_DESTROY ;如果用户按了右上角的关闭按钮,处理该消息
invoke PostQuitMessage,NULL ;向程序发送WM_QUIT消息
.endif
invoke DefWindowProc,hWin,uMsg,wParam,lParam ;调用缺省消息处理过程
ret
WndProc endp
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -