Win32 Assembly
¼³¸í ¶±×³É Çѹø ¾î¼Àºí¸®·Î Â¥º»°Ì´Ï´Ù.
°ÅÀÇ Template ¼öÁØÀ̹ǷΠ´Ù¸¥ ¿¹Á¦µé°ú ´Ù¸¦¹Ù ¾ø½À´Ï´Ù.
´Ü, masm v8.0 ¿¡¼ Å×½ºÆ®ÇßÀ¸´Ï ±×¿ÜÀÇ ¹öÁ¯Àº Àå´ã ¸øÇÕ´Ï´Ù. ±×¸®°í C:\masm32 ¿¡ ¼³Ä¡µÇ¾ú´Ù°í °¡Á¤ÇÏ°í ¸¸µç°ÍÀ̱⿡ ´Ù¸¥°÷¿¡ ¼³Ä¡Çϼ̴ٸé include, includelib ±¸¹®À» Àû´çÈ÷ ¼öÁ¤ÇϽñ⠹ٶø´Ï´Ù. »ç¿ë¹æ¹ý ¶ÄÄÆÄÀÏÀº ¿ä·¸°Ô ÇϽðí
ml /c /coff mz.asm link /SUBSYSTEM:WINDOWS mz.obj ÄÚµå ¶
COMMENT #
Copyright (C) JAEHYUK CHO
All rights reserved.
Code by JaeHyuk Cho <mailto:minzkn@minzkn.com>
#
; Process type --------------------------------
.386 ; 386 CPU »ç¿ë ¿¹°í
.MODEL FLAT,STDCALL ; Ç¥ÁØ ±ÔÄ¢
OPTION CASEMAP:NONE ; ¹Ýµå½Ã ÇÊ¿äÇÔ
; Window project default ----------------------
INCLUDE C:\masm32\include\windows.inc
INCLUDE C:\masm32\include\user32.inc
INCLUDE C:\masm32\include\kernel32.inc
;INCLUDE E:\masm32\include\windows.inc
;INCLUDE E:\masm32\include\user32.inc
;INCLUDE E:\masm32\include\kernel32.inc
; Link library --------------------------------
INCLUDELIB C:\masm32\lib\user32.lib
INCLUDELIB C:\masm32\lib\kernel32.lib
;INCLUDELIB E:\masm32\lib\user32.lib
;INCLUDELIB E:\masm32\lib\kernel32.lib
; Proto region --------------------------------
WinMain PROTO :DWORD, :DWORD, :DWORD, :DWORD
WndProc PROTO :DWORD, :DWORD, :DWORD, :DWORD
; Data select ---------------------------------
.DATA
g_instance DD 0
g_command_line DD 0
g_class_name DB "minzknWin32Engine", 0
g_title_name DB "´ç½ÅÀº ´©±¸¿ä?", 0
g_confirm_exit DB "Á¾·áÇÏ·Á°í¿ä?", 0
g_confirm_exit_title DB "È®ÀÎÁ» ÇϰڽÀ´Ï´Ù.", 0
g_hello DB "¾î¶ó? À©µµ¿ì ³ª¿Ã¶ó±¸ ±×·¡.", 0
; Code zone -----------------------------------
.CODE
START: ; Win32 startup code
INVOKE GetModuleHandle, NULL
MOV g_instance, EAX
INVOKE GetCommandLine
MOV g_command_line, EAX
INVOKE WinMain, g_instance, NULL, g_command_line, SW_SHOWDEFAULT
INVOKE ExitProcess, eax
JMP $
WinMain PROC s_instance:DWORD, ; ³ª´Â ´©±¸´Ù !
s_prev_instance:DWORD, ; ȣȯ¶§¹®¿¡
s_command_line:DWORD, ; À̰ÍÀ» µ¡ºÙ¿©¼...
s_command_show:DWORD ; ¾î¶»°Ô º¸¿©Áö¶ó±¸?
LOCAL s_window_class_ex : WNDCLASSEX ; À©µµ¿ì ÇÐ±Þ È®Àå
LOCAL s_message : MSG ; ¸Þ¼¼ÁöÀü´Þ ¸Å°³Ã¼
LOCAL s_window : DWORD ; ÁÖ À©µµ¿ì
mov s_window_class_ex.cbSize, sizeof(WNDCLASSEX)
mov s_window_class_ex.style, CS_HREDRAW OR CS_VREDRAW
mov s_window_class_ex.lpfnWndProc, offset WndProc
mov s_window_class_ex.cbClsExtra, NULL
mov s_window_class_ex.cbWndExtra, NULL
mov eax, s_instance
mov s_window_class_ex.hInstance, eax
mov s_window_class_ex.hbrBackground, COLOR_BTNFACE + 1
mov s_window_class_ex.lpszMenuName, NULL
mov s_window_class_ex.lpszClassName, offset g_class_name
mov s_window_class_ex.hIcon, NULL
mov s_window_class_ex.hCursor, NULL
mov s_window_class_ex.hIconSm, 0
INVOKE RegisterClassEx, ADDR s_window_class_ex
; Window µî·Ï
INVOKE CreateWindowEx,
0,
ADDR g_class_name,
ADDR g_title_name,
WS_OVERLAPPED OR WS_CAPTION OR WS_SYSMENU OR WS_MAXIMIZEBOX OR WS_MINIMIZEBOX OR WS_BORDER OR WS_THICKFRAME,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, s_instance, NULL
mov s_window, eax
; ºÁ¶ó
INVOKE ShowWindow, s_window, SW_SHOWNORMAL
; Çѹø´õ ºÁ¾ßµÇ..
INVOKE UpdateWindow, s_window
WinLoop:
INVOKE GetMessage, ADDR s_message, NULL, 0, 0 ; ¹¹°¡ µµÂøÇßÀ»±î?
or eax, eax
jz WinExitLoop
INVOKE TranslateMessage, ADDR s_message ; Űº¸µå ´Ï°¡ ó¸®ÇØ
INVOKE DispatchMessage, ADDR s_message ; WndProc ¿¡°Ô ³ªÀÇ Á×À½À» ¾Ë·Á¶ó~
jmp WinLoop
WinExitLoop:
; ³»°¡ ¹«½¼ »óÅÂÀÎÁö »óºÎ¿¡ º¸°íÇÏÀÚ~
mov eax, s_message.wParam
ret
WinMain ENDP
; WinProc callback function -------------------
WndProc PROC s_window:DWORD,
s_message:DWORD,
s_wparam:DWORD,
s_lparam:DWORD
.if s_message == WM_CREATE
; À©µµ¿ì »ý¼ºÇߴµ¥ ¹¹ÇÒ±î?
INVOKE MessageBox, s_window, ADDR g_hello, ADDR g_hello, MB_OK OR MB_ICONQUESTION
xor eax, eax
ret
.elseif s_message == WM_CLOSE
; À©µµ¿ì Á¾·áÇϱâ Á÷ÀüÀε¥...
INVOKE MessageBox, s_window, ADDR g_confirm_exit, ADDR g_confirm_exit_title, MB_YESNO OR MB_ICONQUESTION
CMP EAX, IDYES
JNE ExitCancel
INVOKE DestroyWindow, s_window ; ³ª Á¾·áÇÒ·Á°í Çϴµ¥...
ExitCancel:
xor eax, eax
ret
.elseif s_message == WM_DESTROY
INVOKE PostQuitMessage, NULL ; ÁøÂ¥ Á¾·áÇҰžß...
xor eax, eax
ret
.endif
INVOKE DefWindowProc, s_window, s_message, s_wparam, s_lparam
ret
WndProc ENDP
END START
; End of source
|
Love is in the offing. Be affectionate to one who adores you. |











