📄 stuinfosys(3).asm
字号:
.386
.model flat,stdcall
option casemap:none
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
include stuinfosys.inc
.data
ClassName db "Student Grade Information System",0
AppName db "Student Grade Information System",0
MenuName db "MyMenu",0
File_Open db "Open",0
File_Save db "Save",0
EditClass db "edit", 0
ofn OPENFILENAME <>
FilterString db "All Files", 0, "*.*", 0
db "Text Files", 0, "*.txt", 0, 0
buffer db MAXSIZE dup(0)
Edit_Insert db "Insert Item", 0
.data?
hWinMain dd ?
hInsertDlg dd ?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hwndEdit HWND ? ; Handle to the edit control
hFile HANDLE ? ; File handle
hMemory HANDLE ? ;handle to the allocated memory block
pMemory DWORD ? ;pointer to the allocated memory block
SizeReadWrite DWORD ? ; number of bytes actually read or write
temp db 100 dup(?)
strNo db 8 dup(?)
strName db 6 dup(?)
strASM db 3 dup(?)
strCA db 3 dup(?)
strOS db 3 dup(?)
strTotal db 3 dup(?)
strRank db 2 dup(?)
GeteaxValue DWORD ?
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
invoke ExitProcess,eax
_ProcInsertDlg proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
mov eax, uMsg
.if eax == WM_INITDIALOG
invoke SetWindowText, hWnd, addr Edit_Insert
.elseif eax == WM_CLOSE
invoke EndDialog, hWnd, NULL
.elseif eax == WM_COMMAND
mov eax, wParam
.if eax == IDOK
invoke GetDlgItemText, hWnd, IDC_TEXTNO, addr pMemory, 8
invoke GetDlgItemText, hWnd, IDC_TEXTNAME, addr strName, 6
invoke GetDlgItemText, hWnd, IDC_TEXTASM, addr strASM, 3
invoke GetDlgItemText, hWnd, IDC_TEXTCA, addr strCA, 3
invoke GetDlgItemText, hWnd, IDC_TEXTOS, addr strOS, 3
; invoke SendMessage,hwndEdit,WM_GETTEXT,MEMSIZE-1,pMemory
; invoke WriteFile, hFile, pMemory, GeteaxValue, addr SizeReadWrite, NULL
invoke EndDialog, hWnd, NULL
;;;;;;; invoke SetDlgItemText, hWnd, IDC_STNO, addr strNo
.elseif eax == IDCANCEL
invoke EndDialog, hWnd, NULL
.endif
.else
mov eax, FALSE
ret
.endif
mov eax, TRUE
ret
_ProcInsertDlg endp
WinMain proc hInst:HINSTANCE, hPreInst:HINSTANCE, CmdLine:LPSTR, CmeShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW+1
mov wc.lpszMenuName,OFFSET MenuName ; Put our menu name here
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon, NULL, IDI_APPLICATION
mov wc.hIcon, eax
mov wc.hIconSm, eax
invoke LoadCursor, NULL, IDC_ARROW
mov wc.hCursor, eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx, \
WS_EX_CLIENTEDGE, \
ADDR ClassName, \
ADDR AppName,\
WS_OVERLAPPEDWINDOW, \
CW_USEDEFAULT, \
CW_USEDEFAULT, \
700, \
500, \
NULL, \
NULL, \
hInst, \
NULL
mov hwnd,eax
invoke ShowWindow, hwnd, SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.while TRUE
invoke GetMessage, addr msg, NULL, 0, 0
.break .if eax == 0
invoke IsDialogMessage, hInsertDlg, addr msg
invoke TranslateMessage, addr msg
invoke DispatchMessage, addr msg
.endw
mov eax, msg.wParam
ret
WinMain endp
WndProc proc uses ebx hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.if uMsg==WM_CREATE
invoke CreateWindowEx, NULL, \
addr EditClass, \
NULL, \
WS_VISIBLE or WS_CHILD or ES_LEFT or ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL, \
0, \
0, \
0, \
0, \
hWnd, EditID, \
hInstance, \
NULL
mov hwndEdit, eax
invoke SetFocus, hwndEdit
mov ofn.lStructSize, SIZEOF ofn
push hWnd
pop ofn.hwndOwner
push hInstance
pop ofn.hInstance
mov ofn.lpstrFilter, OFFSET FilterString
mov ofn.lpstrFile, OFFSET buffer
mov ofn.nMaxFile, MAXSIZE
.elseif uMsg==WM_SIZE
mov eax, lParam
mov edx, eax
shr edx, 16
and eax, 0ffffh
invoke MoveWindow, hwndEdit, 0, 0, eax, edx, TRUE
.elseif uMsg==WM_DESTROY
invoke PostQuitMessage, NULL
.elseif uMsg==WM_COMMAND
mov eax, wParam
.if lParam==0
.if ax==IDM_FILE_OPEN
mov ofn.Flags, \
OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or \
OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
invoke GetOpenFileName, addr ofn
.if eax==TRUE
invoke CreateFile, addr buffer, \
GENERIC_READ or GENERIC_WRITE, \
FILE_SHARE_READ or FILE_SHARE_WRITE, \
NULL, \
OPEN_EXISTING, \
FILE_ATTRIBUTE_ARCHIVE, \
NULL
mov hFile, eax
invoke GlobalAlloc, GMEM_MOVEABLE or GMEM_ZEROINIT, MEMSIZE
mov hMemory, eax
invoke GlobalLock, hMemory
mov pMemory, eax
invoke ReadFile, hFile, pMemory, MEMSIZE-1, addr SizeReadWrite, NULL
invoke SendMessage, hwndEdit, WM_SETTEXT, NULL, pMemory
invoke CloseWindow, hFile
invoke GlobalUnlock, pMemory
invoke GlobalFree, hMemory
.endif
invoke SetFocus, hwndEdit
.elseif ax==IDM_FILE_SAVE
mov ofn.Flags, \
OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
invoke GetSaveFileName, ADDR ofn
.if eax==TRUE
invoke CreateFile, ADDR buffer, \
GENERIC_READ or GENERIC_WRITE , \
FILE_SHARE_READ or FILE_SHARE_WRITE, \
NULL, \
CREATE_NEW, \
FILE_ATTRIBUTE_ARCHIVE, \
NULL
mov hFile, eax
invoke GlobalAlloc, GMEM_MOVEABLE or GMEM_ZEROINIT, MEMSIZE
mov hMemory, eax
invoke GlobalLock, hMemory
mov pMemory, eax
invoke SendMessage, hwndEdit, WM_GETTEXT, MEMSIZE-1, pMemory
invoke WriteFile, hFile, pMemory, eax, ADDR SizeReadWrite, NULL
mov GeteaxValue, eax
invoke CloseHandle, hFile
invoke GlobalUnlock,pMemory
invoke GlobalFree,hMemory
.endif
invoke SetFocus,hwndEdit
.elseif ax==IDM_EDIT_INSERT
invoke DialogBoxParam, hInstance, IDD_INSERT, hWnd, _ProcInsertDlg, NULL
.else
invoke DestroyWindow, hWnd
.endif
.endif
.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 + -