⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modeldlg(1).asm

📁 汇编上机试验。简单的学生成绩管理系统
💻 ASM
字号:
.386
.model flat, stdcall
option casemap:none

include		D:\Progra~1\RadASM\masm32\include\windows.inc
include		D:\Progra~1\RadASM\masm32\include\user32.inc
include		D:\Progra~1\RadASM\masm32\include\comdlg32.inc
includelib	D:\Progra~1\RadASM\masm32\lib\comdlg32.lib
includelib	D:\Progra~1\RadASM\masm32\lib\user32.lib
include		D:\Progra~1\RadASM\masm32\include\kernel32.inc
includelib	D:\Progra~1\RadASM\masm32\lib\kernel32.lib

IDD_DIALOG_MAIN	equ	101
IDR_MENU_MAIN	equ	102
IDM_M			equ	40001
IDM_ML		equ	40002
IDOK			equ	1
IDCANCEL		equ	2

.data?
hInstance	dd	?
hWinMain	dd	?
hMlDlg		dd	?

.const
szClassName		db	"MYCLASS", 0
szCaptionMain		db	"the main window", 0
szMBCap		db	"Message box", 0
szMMCap		db	"model", 0
szMMLCap		db	"modeless", 0
szOK			db	"pressed OK", 0
szCancel		db	"pressed Cancel", 0

.code
_ProcDlgModeless	proc	hWnd, uMsg, wParam, lParam
	
	mov	eax, uMsg
	.if	eax == WM_INITDIALOG
		invoke	SetWindowText, hWnd, addr szMMLCap
	.elseif	eax == WM_CLOSE
		invoke	DestroyWindow, hWnd
	.elseif	eax == WM_COMMAND
		mov	eax, wParam
		.if	eax == IDOK
			invoke MessageBox, NULL, addr szOK, addr szMBCap, MB_OK
		.elseif	eax == IDCANCEL
			invoke MessageBox, NULL, addr szCancel, addr szMBCap, MB_OK
			invoke EndDialog, hWnd, NULL
		.endif
	.else
		mov	eax, FALSE
	ret
	.endif
	mov	eax, TRUE
	ret

_ProcDlgModeless endp

_ProcDlgModel	proc	hWnd, uMsg, wParam, lParam
	
	mov	eax, uMsg
	.if	eax == WM_INITDIALOG
		invoke	SetWindowText, hWnd, addr szMMCap
	.elseif	eax == WM_CLOSE
		invoke EndDialog, hWnd, NULL
	.elseif	eax == WM_COMMAND
		mov	eax, wParam
		.if	eax == IDOK
			invoke	MessageBox, NULL, addr szOK, addr szMBCap, MB_OK
		.elseif	eax == IDCANCEL
			invoke	MessageBox, NULL, addr szCancel, addr szMBCap, MB_OK
			invoke	EndDialog, hWnd, NULL
		.endif
	.else
		mov 	eax, FALSE
		ret
	.endif
	mov	eax, TRUE
	ret
	
_ProcDlgModel endp

_ProcWinMain	proc	uses ebx edi esi, hWnd, uMsg, wParam, lParam
	LOCAL	stPs:PAINTSTRUCT
	LOCAL	stRect:RECT
	LOCAL	hDc
	mov	eax, uMsg
	.if	eax == WM_COMMAND
		mov	eax, wParam
		movzx	eax, ax
		.if	eax == IDM_M
			invoke	DialogBoxParam, hInstance, IDD_DIALOG_MAIN, hWnd, _ProcDlgModel, NULL
		.elseif	eax == IDM_ML
			invoke	CreateDialogParam, hInstance, IDD_DIALOG_MAIN, hWnd, _ProcDlgModeless, NULL
			mov	hMlDlg, eax
		.elseif	eax == IDOK
			invoke	MessageBox, NULL, NULL, NULL, MB_OK 
		.endif
	.elseif	eax == WM_CLOSE
		invoke	DestroyWindow, hWinMain
	.elseif	eax == WM_DESTROY
		invoke	PostQuitMessage, NULL
	.else
		invoke DefWindowProc, hWnd, uMsg, wParam, lParam
		ret
	.endif
	xor	eax, eax
	ret

_ProcWinMain endp

_WinMain	proc
	LOCAL	stWndClass:WNDCLASSEX
	LOCAL	stMsg:MSG
	invoke	GetModuleHandle, NULL
	mov	hInstance, eax
	invoke	RtlZeroMemory, addr stWndClass, sizeof stWndClass
	invoke	LoadCursor, 0, IDC_ARROW
	mov	stWndClass.hCursor, eax
	push	hInstance
	pop	stWndClass.hInstance
	mov	stWndClass.cbSize, sizeof WNDCLASSEX
	mov	stWndClass.style, CS_HREDRAW or CS_VREDRAW
	mov	stWndClass.lpfnWndProc, offset _ProcWinMain
	mov	stWndClass.hbrBackground, COLOR_WINDOW+1
	mov	stWndClass.lpszClassName, offset szClassName
	invoke	RegisterClassEx, addr stWndClass
	invoke	LoadMenu,hInstance, IDR_MENU_MAIN
	invoke	CreateWindowEx, WS_EX_CLIENTEDGE, offset szClassName, offset szCaptionMain, WS_OVERLAPPEDWINDOW, 100, 100, CW_USEDEFAULT, CW_USEDEFAULT, NULL, eax, hInstance, NULL
	mov	hWinMain, eax
	invoke	ShowWindow, hWinMain, SW_SHOWNORMAL
	invoke UpdateWindow, hWinMain
	
	.while	TRUE
		invoke	GetMessage, addr stMsg, NULL, 0, 0
		.break	.if	eax == 0
			invoke	IsDialogMessage, hMlDlg, addr stMsg
			invoke	TranslateMessage, addr stMsg
			invoke DispatchMessage, addr stMsg
	.endw
	ret

_WinMain endp

start:
call	_WinMain
invoke	ExitProcess, NULL
end	start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -