📄 02.窗体.asm
字号:
include windows.inc
.data
wc WNDCLASS ;窗体风格
hInstance dd ;程序实例句柄
msg MSG ;Windows的消息结构
.code
Start:
;取得程序的实例句柄
invoke GetModuleHandle, NULL
mov hInstance, eax
;注册一个窗口类
mov wc.style, 0
mov wc.lpfnWndProc, offset WindowProc
mov wc.cbClsExtra, 0
mov wc.cbWndExtra, 0
mov eax, hInstance
mov wc.hInstance, eax
invoke LoadIcon, NULL, IDI_WARNING ;使用感叹号图标
mov wc.hIcon, eax
invoke LoadCursor, NULL, IDC_CROSS ;使用十字形光标
mov wc.hCursor, eax
invoke GetStockObject, WHITE_BRUSH ;使用白色背景
mov wc.hbrBackground, eax
mov wc.lpszMenuName, 0
mov wc.lpszClassName, "MyCls"
invoke RegisterClass, offset wc
;创建一个窗体实例
invoke CreateWindowEx, 0, "MyCls", "演示窗体", \
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, \
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, 0
invoke ShowWindow, eax, SW_SHOW ;将刚才创建的窗体显示出来
;进入消息循环
invoke GetMessage, offset msg, NULL, 0, 0
while eax
invoke TranslateMessage, offset msg
invoke DispatchMessage, offset msg
invoke GetMessage, offset msg, NULL, 0, 0
endw
invoke ExitProcess,0 ;退出程序
;-----------------------------------------------------------------
;窗口函数
WindowProc proc stdcall hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
local ps:PAINTSTRUCT ;定义局部变量
local rect:RECT
if uMsg = WM_PAINT ;当窗体刷新时在窗体中央显示文字
invoke GetClientRect, hWnd, addr rect
sar rect.right, 1
sar rect.bottom, 1
invoke BeginPaint, hWnd, addr ps
invoke SetTextAlign, ps.hdc, TA_CENTER
invoke TextOut, ps.hdc, rect.right, rect.bottom, "欢迎使用辰灿汇编语言开发环境", 28
invoke EndPaint, hWnd, addr ps
return 0 ;返回函数一定要使用return语句,而不能使用ret指令,否则局部变量没有退栈,会出现堆栈混乱
elseif uMsg == WM_CLOSE
invoke PostQuitMessage, 0
return 0
elseif uMsg == WM_SIZE
invoke RedrawWindow, hWnd, NULL, NULL, RDW_ERASENOW|RDW_INVALIDATE
else
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
endif
endp
;-----------------------------------------------------------------
end Start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -