📄 font.asm
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDM_SELECTFONT equ 1
IDM_EXIT equ 3
.data
ClassName db "WinClass",0
TitleName db "选择字体",0
cft CHOOSEFONT <0>
DisplayText db "花溅泪",10,"鸟惊心",10,"山写照",10,"水传神",0
MenuName db "MyMenu",0
.data?
hInstance HINSTANCE ?
font LOGFONT <>
hFont HFONT ?
hOldFont HFONT ?
Rect RECT <>
.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,offset MenuName
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 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
.if uMsg==WM_DESTROY
invoke DeleteObject ,hFont
invoke PostQuitMessage,NULL
.elseif uMsg==WM_COMMAND
mov eax,wParam
.if ax==IDM_SELECTFONT
mov cft.lStructSize,sizeof CHOOSEFONT
mov eax,hWnd
mov cft.hwndOwner,eax
mov eax,hInstance
mov cft.hInstance,eax
mov cft.lpLogFont,offset font
mov cft.rgbColors,0ffh
mov cft.Flags,CF_BOTH+CF_TTONLY+CF_EFFECTS
invoke ChooseFont,addr cft
invoke InvalidateRect,hWnd,NULL,TRUE
.else
invoke DestroyWindow,hWnd
.endif
.elseif uMsg==WM_SIZE
invoke GetClientRect,hWnd,addr Rect
.elseif uMsg==WM_PAINT
invoke BeginPaint,hWnd,addr ps
mov hdc,eax
invoke CreateFontIndirect,addr font
mov hFont,eax
invoke SelectObject,hdc,hFont
mov hOldFont,eax
invoke SetTextColor,hdc,cft.rgbColors
invoke DrawText,hdc,addr DisplayText,-1,addr Rect,DT_CENTER
invoke SelectObject,hdc,hOldFont
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 + -