📄 dialog.asm
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
ModalDlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
ModelessDlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDR_MODELESSDIALOG equ 101
IDR_MODALDIALOG equ 102
IDR_MENU equ 103
IDC_MODALBUTTON equ 1000
IDC_MODALEDIT equ 1001
IDC_MODELESSEDIT equ 1002
IDC_MODELESSCHECK equ 1003
IDC_MODELESSBUTTON equ 1004
IDM_MODALNEW equ 40001
IDM_EXIT equ 40002
IDM_MODELESSNEW equ 40003
IDM_MODELESSCLOSE equ 40006
.data
ClassName db "WinClass",0
TitleName db "对话框测试",0
.data?
hInstance HINSTANCE ?
hMenu HMENU ?
hModelessDialog HWND ?
.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 eax,IDR_MENU
mov wc.lpszMenuName,eax
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
invoke GetMenu,hwnd
mov hMenu,eax
.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
.if uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.elseif uMsg==WM_COMMAND
mov eax,wParam
.if lParam==NULL
.if ax==IDM_MODALNEW
invoke DialogBoxParam,NULL,IDR_MODALDIALOG,hWnd,addr ModalDlgProc,NULL
.elseif ax==IDM_MODELESSNEW
invoke CreateDialogParam,hInstance,IDR_MODELESSDIALOG,hWnd,addr ModelessDlgProc,NULL
mov hModelessDialog ,eax
invoke ShowWindow,eax,SW_SHOWDEFAULT
invoke EnableMenuItem,hMenu,IDM_MODELESSNEW,MF_DISABLED
.elseif ax==IDM_MODELESSCLOSE
invoke DestroyWindow,hModelessDialog
invoke EnableMenuItem,hMenu,IDM_MODELESSNEW,MF_ENABLED
.elseif ax==IDM_EXIT
invoke DestroyWindow,hWnd
.endif
.endif
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
ModalDlgProc proc hWnd:dword,uMsg:dword,wParam:dword,lParam:dword
.if uMsg==WM_INITDIALOG
invoke GetDlgItem,hWnd,IDC_MODALEDIT
invoke SetFocus,eax
mov eax,FALSE
ret
.elseif uMsg==WM_CLOSE
invoke EndDialog,hWnd,NULL
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
ModalDlgProc endp
ModelessDlgProc proc hWnd:dword,uMsg:dword,wParam:dword,lParam:dword
.if uMsg==WM_INITDIALOG
invoke GetDlgItem,hWnd,IDC_MODELESSEDIT
invoke SetFocus,eax
mov eax,FALSE
ret
.elseif uMsg==WM_CLOSE
invoke EnableMenuItem,hMenu,IDM_MODELESSNEW,MF_ENABLED
invoke DestroyWindow,hWnd
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
ModelessDlgProc endp
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -