WinApp.asm
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
 

最終更新:2019年09月04日 09:52
添付ファイル