📄 fileopen.asm
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDM_NEW equ 1
IDM_SAVE equ 2
IDM_EXIT equ 3
.data
ClassName db "WinClass",0
TitleName db "文件打开",0
ofn OPENFILENAME <0>
FilterString db "所有文件(*.*)",0,"*.*",0,"Word文档(*.DOC)",0,"*.DOC",0,"应用程序",0,"*.EXE;*.COM;*.DLL;*.PIF",0,0
Buffer db "请输入文件名",250 dup (0)
PathName db "路径名为:",0
FileName db "文件名为:",0
ExtensionName db "扩展名为:",0
Crlf db 13,10,0
CatName db 300 dup (0)
MenuName db "MyMenu",0
.data?
hInstance HINSTANCE ?
temp db 100 dup (?)
.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 wc.lpszMenuName,offset MenuName
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
.while TRUE
invoke GetMessage, addr msg,NULL,0,0
.BREAK .IF (!eax)
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 ax==IDM_NEW
mov ofn.lStructSize,sizeof OPENFILENAME
mov eax,hWnd
mov ofn.hwndOwner,eax
mov eax,hInstance
mov ofn.hInstance,eax
mov ofn.lpstrFilter,offset FilterString
mov ofn.lpstrFile,offset Buffer
mov ofn.lpstrTitle,offset TitleName
mov ofn.nMaxFile,260
mov ofn.Flags,OFN_EXPLORER+OFN_FILEMUSTEXIST+OFN_PATHMUSTEXIST
invoke GetOpenFileName,addr ofn
.if eax
invoke lstrcat,addr CatName,addr PathName
mov ax,ofn.nFileOffset
movzx eax,ax
invoke lstrcpyn,addr temp,ofn.lpstrFile,eax
invoke lstrcat,addr CatName,addr temp
invoke lstrcat,addr CatName,addr Crlf
invoke lstrcat,addr CatName,addr FileName
mov cx,ofn.nFileOffset
mov ax,ofn.nFileExtension
sub ax,cx
movzx eax,ax
push esi
mov esi,ofn.lpstrFile
mov dx,ofn.nFileOffset
movzx edx,dx
add esi,edx
invoke lstrcpyn,addr temp,esi,eax
invoke lstrcat,addr CatName,addr temp
invoke lstrcat,addr CatName,addr Crlf
invoke lstrcat,addr CatName,addr ExtensionName
invoke lstrlen,ofn.lpstrFile
mov cx,ofn.nFileExtension
movzx ecx,cx
sub eax,ecx
inc eax
mov esi,ofn.lpstrFile
mov dx,ofn.nFileExtension
movzx edx,dx
add esi,edx
invoke lstrcpyn,addr temp,esi,eax
invoke lstrcat,addr CatName,addr temp
invoke MessageBox,hWnd,addr CatName,addr TitleName,MB_OK
pop esi
.endif
.elseif ax==IDM_SAVE
;暂缺。
.else
invoke DestroyWindow,hWnd
.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 + -