|

楼主 |
发表于 2019-11-2 14:21:22
|
显示全部楼层
本帖最后由 kikiatw 于 2019-11-2 14:24 编辑
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 窗口程序的模板代碼
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- .386
- .model flat,stdcall
- option casemap:none
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; Include 文件定義
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- include windows.inc
- include gdi32.inc
- includelib gdi32.lib
- include user32.inc
- includelib user32.lib
- include kernel32.inc
- includelib kernel32.lib
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 數據段
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- .data?
- hInstance dd ?
- hWinMain dd ?
- hWinSlav dd ?
- .const
- szClassName db 'MyClass',0
- szCaptionMain db 'My first Window !',0
- szText db 'Welcome to fishc.com!',0
- szButton db 'button',0
- szButtonText db '&OK',0
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 代碼段
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- .code
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 窗口過程
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- _ProcWinMain proc uses ebx edi esi hWnd,uMsg,wParam,lParam
- local @stPs:PAINTSTRUCT
- local @stRect:RECT
- local @hDc
- mov eax,uMsg
- ;********************************************************************
- .if eax == WM_PAINT
- invoke BeginPaint,hWnd,addr @stPs
- mov @hDc,eax
- invoke GetClientRect,hWnd,addr @stRect
- invoke DrawText, @hDc, addr szText, -1, addr @stRect, DT_SINGLELINE or DT_CENTER or DT_VCENTER
- invoke EndPaint,hWnd,addr @stPs
- ;********************************************************************
- .elseif eax == WM_CLOSE
- invoke DestroyWindow,hWinMain
- invoke DestroyWindow,hWinSlav
- 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 RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
- ;********************************************************************
- ; 註冊窗口類
- ;********************************************************************
- invoke GetModuleHandle,NULL
- mov hInstance,eax
- mov @stWndClass.hInstance,eax
- ; push hInstance
- ; pop @stWndClass.hInstance
- invoke LoadCursor,0,IDC_ARROW
- mov @stWndClass.hCursor,eax
- 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 CreateWindowEx,WS_EX_CLIENTEDGE, offset szClassName, offset szCaptionMain, WS_OVERLAPPEDWINDOW, 100,100,600,400, NULL, NULL, hInstance, NULL
- mov hWinMain,eax
- invoke ShowWindow,hWinMain,SW_SHOWNORMAL
- invoke UpdateWindow,hWinMain
- invoke CreateWindowEx,WS_EX_CLIENTEDGE, offset szButton, offset szButtonText, WS_CHILD or WS_VISIBLE, 10,10,100,80, hWinMain, 1, hInstance, NULL
- mov hWinSlav,eax
- invoke ShowWindow,hWinSlav,SW_SHOWNORMAL
- invoke UpdateWindow,hWinSlav
- ;********************************************************************
- ; 消息循環
- ;********************************************************************
- .while TRUE
- invoke GetMessage,addr @stMsg,NULL,0,0
- .break .if eax == 0
- invoke TranslateMessage,addr @stMsg
- invoke DispatchMessage,addr @stMsg
- .endw
- ret
- _WinMain endp
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- start:
- call _WinMain
- invoke ExitProcess,NULL
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- end start
复制代码
以上是一個簡短的程序, 麻煩您了
執行後
|
|