msgloop.asm
来自「windows下汇编语言 学习汇编语言好助手」· 汇编 代码 · 共 130 行
ASM
130 行
;******************************
;MsgLoop.asm *
;功能:演示注册window类及 *
; 建立Window和消息循环 *
;******************************
.386p
.model flat,stdcall
include win32.inc
extrn GetMessageA:proc
extrn TranslateMessage:proc
extrn DispatchMessageA:proc
extrn ShowWindow:proc
extrn UpdateWindow:proc
extrn CreateWindowExA:proc
extrn RegisterClassA:proc
extrn DefWindowProcA:proc
extrn MessageBoxA:proc
extrn ExitProcess:proc
extrn LoadIconA:proc
extrn LoadCursorA:proc
extrn GetStockObject:proc
extrn GetModuleHandleA:proc
extrn PostQuitMessage:proc
;结构定义
POINT struc
x dd ?
y dd ?
ends
MSG struc
hwnd dd ?
message dd ?
wParam dd ?
lParam dd ?
time dd ?
pt POINT<>
ends
WNDCLASS struc
style dd ?
lpfnWndProc dd ?
cbClsExtra dd ?
cbWndExtra dd ?
hInstance dd ?
hIcon dd ?
hCursor dd ?
hbrBackground dd ?
lpszMenuName dd ?
lpszClassName dd ?
ends
.data ;数据
Text db 'Left ButtonDown',0
myclassname db 'MyClass',0 ;窗口类名
caption db 'Message Loop',0 ;窗口标题
hInst dd ?
hWnd dd ?
align 4 ;四字节对齐
msg MSG<> ;消息结构
wc WNDCLASS<> ;窗口类结构
.code ;代码
main:
call GetModuleHandleA,0 ;取模块句柄
mov [hInst],eax
mov wc.lpszClassName,offset myclassname
mov eax,[hInst]
mov wc.hInstance,eax
mov wc.lpfnWndProc,offset WinMsgProc
call LoadIconA,0,IDI_APPLICATION
mov wc.hIcon,eax
call LoadCursorA,0,IDC_IBEAM
mov wc.hCursor,eax
mov wc.lpszMenuName,0
call GetStockObject,WHITE_BRUSH
mov wc.hbrBackground,eax
mov wc.style,CS_HREDRAW or CS_VREDRAW or CS_GLOBALCLASS
mov wc.cbClsExtra,0
mov wc.cbWndExtra,0
;注册窗口类
call RegisterClassA,offset wc
;建立主窗口
call CreateWindowExA,0,offset myclassname,offset caption,\
WS_OVERLAPPEDWINDOW, \
100,100,450,300,0,0, \
[hInst],0
mov [hWnd],eax
call ShowWindow,[hWnd],1
call UpdateWindow,[hWnd]
;消息循环
MsgLoop:
call GetMessageA,offset msg,0,0,0
or eax,eax
jz Exit
call TranslateMessage,offset msg
call DispatchMessageA,offset msg
jmp MsgLoop
Exit:
call ExitProcess,0 ;退出进程
;**************************************************************************
;主窗口过程
WinMsgProc proc uses ebx edi esi, handle:DWORD, wMsg:DWORD, wParam1:DWORD, lParam1:DWORD
cmp wMsg,WM_CREATE
jz create
cmp wMsg,WM_DESTROY
jz destory
cmp wMsg,WM_LBUTTONDOWN
jz lbuttondown
jmp default
create: ;窗口建立
xor eax,eax
ret
destory: ;窗口注销
call PostQuitMessage,0
xor eax,eax
ret
lbuttondown: ;鼠标单击
call MessageBoxA,handle,offset Text,offset caption,MB_OK
xor eax,eax
ret
default: ;默认窗口处理过程
call DefWindowProcA,handle,wMsg,wParam1,lParam1
ret
WinMsgProc endp
end main
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?