WinApp.asm #highlight(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 }} #image(WinApp.jpg)