開発環境 |
Microsoft Visual Studio Community 2017 |
実行環境 |
Microsoft Windows 10 Home (64bit) |
プロジェクトの種類 |
Visual C++/空のプロジェクト |
プロジェクト名 |
WinApp |
参考
ソリューション エクスプローラーで追加するファイル
フォルダ |
種類 |
名前 |
プロパティ/項目の種類 |
ソース ファイル |
Visual C++/C++ ファイル (.cpp) |
WinApp.asm |
Microsoft Macro Assembler |
ヘッダー ファイル |
Visual C++/ヘッダー ファイル (.h) |
windows.inc |
ビルドに含めない |
WinApp.asm
.386
.model flat, stdcall
option casemap:none
include <windows.inc>
; 関数プロトタイプ宣言
WinMain proto :dword, :dword, :dword, :dword
.data
ClassName db "SampleWndClass", 0
AppName db "WinApp", 0
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
.code
start:
invoke GetModuleHandleA, NULL
mov hInstance, eax
invoke GetCommandLineA
mov CommandLine, eax
invoke WinMain, hInstance, NULL, CommandLine, 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
mov wc.lpfnWndProc, offset WndProc
mov wc.cbClsExtra, 0
mov wc.cbWndExtra, 0
push hInstance
pop wc.hInstance
mov wc.hbrBackground, COLOR_WINDOW+1
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, offset ClassName
invoke LoadIconA, NULL, IDI_APPLICATION
mov wc.hIcon, eax
mov wc.hIconSm, eax
invoke LoadCursorA, NULL, IDC_ARROW
mov wc.hCursor, eax
invoke RegisterClassExA, addr wc
invoke CreateWindowExA,
0, addr ClassName, addr AppName, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
NULL, NULL, hInst, NULL
mov hwnd, eax
invoke ShowWindow, hwnd, CmdShow
invoke UpdateWindow, hwnd
.while TRUE
invoke GetMessageA, addr msg, NULL, 0, 0
.break .if (!eax)
invoke TranslateMessage, addr msg
invoke DispatchMessageA, 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, 0
.else
invoke DefWindowProcA, hWnd, uMsg, wParam, lParam
ret
.endif
xor eax, eax
ret
WndProc endp
end start
windows.inc
; 定数定義
NULL equ 0
TRUE equ 1
COLOR_WINDOW equ 5
SW_SHOWDEFAULT equ 10
WM_DESTROY equ 0002h
IDC_ARROW equ 7f00h
IDI_APPLICATION equ 7f00h
CW_USEDEFAULT equ 80000000h
CS_VREDRAW equ 0001h
CS_HREDRAW equ 0002h
WS_OVERLAPPED equ 00000000h
WS_CAPTION equ 00c00000h
WS_SYSMENU equ 00080000h
WS_THICKFRAME equ 00040000h
WS_MINIMIZEBOX equ 00020000h
WS_MAXIMIZEBOX equ 00010000h
WS_OVERLAPPEDWINDOW equ WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or WS_THICKFRAME or WS_MINIMIZEBOX or WS_MAXIMIZEBOX
; 型定義
HBRUSH equ <dword>
HCURSOR equ <dword>
HICON equ <dword>
HINSTANCE equ <dword>
HWND equ <dword>
_int equ <dword>
LONG equ <dword>
LPARAM equ <dword>
LPCTSTR equ <dword>
LPSTR equ <dword>
UINT equ <dword>
WNDPROC equ <dword>
WPARAM equ <dword>
WNDCLASSEX struct
cbSize UINT ?
style UINT ?
lpfnWndProc WNDPROC ?
cbClsExtra _int ?
cbWndExtra _int ?
hInstance HINSTANCE ?
hIcon HICON ?
hCursor HCURSOR ?
hbrBackground HBRUSH ?
lpszMenuName LPCTSTR ?
lpszClassName LPCTSTR ?
hIconSm HICON ?
WNDCLASSEX ends
MSG struct
hwnd HWND ?
message UINT ?
wParam WPARAM ?
lParam LPARAM ?
time DWORD ?
struct pt
x LONG ?
y LONG ?
ends
MSG ends
; Windows API
CreateWindowExA proto :dword, :dword, :dword, :dword, :dword, :dword, :dword, :dword, :dword, :dword, :dword, :dword
DefWindowProcA proto :dword, :dword, :dword, :dword
DispatchMessageA proto :dword
ExitProcess proto :dword
GetCommandLineA proto
GetLastError proto
GetMessageA proto :dword, :dword, :dword, :dword
GetModuleHandleA proto :dword
LoadCursorA proto :dword, :dword
LoadIconA proto :dword, :dword
PostQuitMessage proto :dword
RegisterClassExA proto :dword
ShowWindow proto :dword, :dword
TranslateMessage proto :dword
UpdateWindow proto :dword
最終更新:2017年09月24日 16:43