📄 控件.asm
字号:
.386
.model flat, stdcall
option casemap :none ;case sensitive
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
;定义宏 szText
szText MACRO Name, Text:VARARG
LOCAL lbl
jmp lbl
Name db Text,0
lbl:
ENDM
;过程声明
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
IDD_DIALOG1 equ 1 ;定义对话框ID值
.data
hButton1 dd 0 ;第1个按钮句柄
hButton2 dd 0 ;第2个按钮句柄
hList1 dd 0 ;列表框句柄
hIcon1 dd 0 ;图标句柄
hInstance dd 0 ;应用程序实例句柄
.code
start:
invoke GetModuleHandle, NULL
mov hInstance, eax
;调用资源,建立对话框
invoke DialogBoxParam,hInstance,IDD_DIALOG1,0,ADDR WndProc,0
invoke ExitProcess,eax
;对话框消息处理过程
WndProc proc hWin :DWORD,
uMsg :DWORD,
wParam :DWORD,
lParam :DWORD
.if uMsg == WM_INITDIALOG ;对话框显示时产生,一般用于初始化控件
szText dlgTitle,"我的第一个对话框"
invoke SendMessage,hWin,WM_SETTEXT,0,ADDR dlgTitle ;设置新的对话框标题
invoke LoadIcon,hInstance,200 ;装载图标资源
mov hIcon1, eax ;图标句柄'hIcon1
invoke SendMessage,hWin,WM_SETICON,1,hIcon1 ;修改窗口图标
invoke GetDlgItem,hWin,1000 ;获取ID=1000的控件的句柄(列表框)
mov hList1, eax ;句柄'hList1
invoke GetDlgItem,hWin,501 ;获取ID=501的控件的句柄(按钮1)
mov hButton1, eax
invoke GetDlgItem,hWin,502 ;获取ID=502的控件的句柄(按钮2)
mov hButton2, eax
xor eax, eax
ret
.elseif uMsg == WM_COMMAND ;在该消息下处理控件消息
.if wParam == 501 ;第1个按钮被按下
szText botton1,"您按了第 1 个按钮"
invoke MessageBox,hWin,ADDR botton1,ADDR dlgTitle,MB_OK
invoke SendMessage,hList1,LB_ADDSTRING,0,addr botton1 ;发送文本到列表框
.elseif wParam == 502 ;第2个按钮被按下
szText botton2,"您按了第 2 个按钮"
invoke MessageBox,hWin,ADDR botton2,ADDR dlgTitle,MB_OK
invoke SendMessage,hList1,LB_ADDSTRING,0,addr botton2 ;发送文本到列表框
.endif
.elseif uMsg == WM_CLOSE ;程序结束
invoke EndDialog,hWin,0 ;结束对话框
.endif
xor eax, eax ;this must be here in NT4
ret
WndProc endp
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -