📄 textout.asm
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.data
ClassName db "WinClass",0
TitleName db "文本输出",0
Verse1 db "清明时节雨纷纷,"
Verse2 db "路上行人欲断魂。"
Verse3 db "借问酒家何处有,"
Verse4 db "牧童遥指杏花村。"
FontName db "楷体",0
.data?
hInstance HINSTANCE ?
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke WinMain, NULL,NULL,NULL, SW_SHOWDEFAULT
invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,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_DBLCLKS
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
mov eax, hInstance
mov wc.hInstance,eax
invoke GetStockObject,WHITE_BRUSH
mov wc.hbrBackground,eax
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_ASTERISK
mov wc.hIcon,eax
mov wc.hIconSm,0
invoke LoadCursor,NULL,IDC_HAND
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,WS_EX_CLIENTEDGE+WS_EX_APPWINDOW+WS_EX_TOPMOST,addr ClassName,\
addr TitleName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,400,200,\
NULL,NULL,hInst,NULL
mov hwnd,eax
invoke ShowWindow,hwnd,CmdShow
invoke UpdateWindow,hwnd
.while TRUE
invoke GetMessage, addr msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage,addr msg
invoke DispatchMessage, addr msg
.endw
mov eax,msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hdc:HDC
LOCAL ps:PAINTSTRUCT
LOCAL hOldF:HFONT
LOCAL hColor:COLORREF
LOCAL SizeRgn:SIZEL
LOCAL tm:TEXTMETRICA
LOCAL pt:POINT
.if uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.elseif uMsg==WM_PAINT
invoke BeginPaint,hWnd,addr ps
mov hdc,eax
mov pt.x,50
mov pt.y,50
invoke CreateFont,30,10,0,0,300,0,TRUE,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH or FF_SCRIPT,addr FontName
invoke SelectObject,hdc,eax
mov hOldF,eax
invoke SetBkMode,hdc,OPAQUE
RGB 0FFh,0,0
invoke SetTextColor,hdc,eax
mov hColor,eax
invoke GetTextMetrics,hdc,addr tm
invoke TextOut,hdc,pt.x,pt.y,addr Verse1,sizeof Verse1
invoke GetTextExtentPoint32,hdc,addr Verse1,sizeof Verse1,addr SizeRgn
mov eax,pt.x
add eax,SizeRgn.x
add eax,10
invoke TextOut,hdc,eax,pt.y,addr Verse2,sizeof Verse2
mov eax,pt.y
add eax,tm.tmHeight
add eax,tm.tmExternalLeading
add eax,10
mov pt.y,eax
invoke TextOut,hdc,pt.x,pt.y,addr Verse3,sizeof Verse3
invoke GetTextExtentPoint32,hdc,addr Verse3,sizeof Verse3,addr SizeRgn
mov eax,pt.x
add eax,SizeRgn.x
add eax,10
invoke TextOut,hdc,eax,pt.y,addr Verse4,sizeof Verse4
invoke SelectObject,hdc,hOldF
invoke SetTextColor,hdc,hColor
invoke EndPaint ,hWnd,addr ps
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -