comment *
MASM32 SDK
ml /c /coff WinApp.asm
link /subsystem:windows WinApp
*
.386
.model flat, stdcall
option casemap:none
include windows.inc
include gdi32.inc
include kernel32.inc
include user32.inc
includelib gdi32.lib
includelib kernel32.lib
includelib user32.lib
WinMain proto :DWORD, :DWORD, :DWORD, :DWORD
OnPaint proto :DWORD
.data
AppName db 'WinApp', 0
hello db 'hello, world', 0
.code
start proc
local hInstance:HINSTANCE
local lpCmdLine:LPSTR
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke GetCommandLine
mov lpCmdLine, eax
invoke WinMain, hInstance, NULL, lpCmdLine, SW_SHOWDEFAULT
invoke ExitProcess, eax
start endp
WinMain proc hInstance:HINSTANCE, hPrevInstance:HINSTANCE, lpCmdLine:LPSTR, nShowCmd:DWORD
local wc:WNDCLASSEX
local msg:MSG
local hWnd:HWND
; ウィンドウクラスの登録
mov wc.cbSize, sizeof WNDCLASSEX
mov wc.lpfnWndProc, offset WndProc
mov wc.cbClsExtra, 0
mov wc.cbWndExtra, 0
mov eax, hInstance
mov wc.hInstance, eax
mov wc.hIcon, 0
invoke LoadCursor, NULL, IDC_ARROW
mov wc.hCursor, eax
mov wc.hbrBackground, COLOR_WINDOW+1
mov wc.lpszMenuName, 0
mov wc.lpszClassName, offset AppName
mov wc.hIconSm, 0
invoke RegisterClassEx, addr wc
; ウィンドウの作成
invoke CreateWindowEx,
0, addr AppName, addr AppName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0,
CW_USEDEFAULT, 0,
NULL, NULL, hInstance, NULL
mov hWnd, eax
invoke ShowWindow, hWnd, nShowCmd
invoke UpdateWindow, hWnd
@@: ; メッセージループ
invoke GetMessage, addr msg, NULL, 0, 0
or eax, eax
jz @f
invoke TranslateMessage, addr msg
invoke DispatchMessage, addr msg
jmp @b
@@:
mov eax, msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
cmp uMsg, WM_PAINT
jne @f
invoke OnPaint, hWnd
jmp @exit
@@:
cmp uMsg, WM_DESTROY
jne @f
invoke PostQuitMessage, 0
jmp @exit
@@:
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret
@exit:
xor eax, eax
ret
WndProc endp
OnPaint proc hWnd:HWND
local ps:PAINTSTRUCT
local hdc:HDC
local len:DWORD
invoke BeginPaint, hWnd, addr ps
mov hdc, eax
invoke lstrlen, addr hello
mov len, eax
invoke TextOut, hdc, 0, 0, addr hello, len
invoke EndPaint, hWnd, addr ps
ret
OnPaint endp
end start