Iczelion's Win32 Assembly Tutorial: A Simple Window

format PE GUI 4.0
entry start

include '%fasminc%\win32w.inc'


;================================================================================[DATA]====
section '.data' data readable writeable

    wTitle	   TCHAR   'Iczelion Tutorial No.3',0 ;name of our window
    wClsName	   TCHAR   'TUT03',0		      ;name of our window class

    wMsg	   MSG
    wCls	   WNDCLASS
    wHMain	   dd	?
    wHInstance	   dd	?


;================================================================================[CODE]====
section '.code' code readable executable

start:

  ; registering the window class

    invoke  GetModuleHandle, NULL
    mov     [wHInstance], eax
    mov     [wCls.hInstance], eax
    mov     [wCls.style], CS_HREDRAW or CS_VREDRAW
    mov     [wCls.lpfnWndProc], window_procedure
    mov     [wCls.lpszClassName], wClsName
    mov     [wCls.hbrBackground], COLOR_WINDOW+1
    invoke  LoadIcon, NULL, IDI_APPLICATION
    mov     [wCls.hIcon], eax
    invoke  LoadCursor, NULL, IDC_ARROW
    mov     [wCls.hCursor], eax
    invoke  RegisterClass, wCls


  ; creating the main window

    invoke  CreateWindowEx,\
	    0,\
	    wClsName,\
	    wTitle,\
	    WS_OVERLAPPEDWINDOW,\
	    CW_USEDEFAULT,\
	    CW_USEDEFAULT,\
	    CW_USEDEFAULT,\
	    CW_USEDEFAULT,\
	    NULL,\
	    NULL,\
	    [wHInstance],\
	    NULL
    mov     [wHMain],eax
    invoke  ShowWindow, [wHMain], SW_SHOW

; entering the message loop
window_message_loop_start:
    invoke    GetMessage, wMsg, NULL, 0, 0
    or	      eax, eax
    je	      window_message_loop_end
    invoke    TranslateMessage,wMsg
    invoke    DispatchMessage,wMsg
    jmp       window_message_loop_start

window_message_loop_end:
    invoke  ExitProcess, 0


;----------------------------------------------------------------<the window procedure>----
proc window_procedure uses ebx esi edi, hWnd, uMsg, wParam, lParam

    cmp     [uMsg], WM_DESTROY
    je	    .wmDESTROY

.wmDEFAULT:
    invoke  DefWindowProc, [hWnd], [uMsg], [wParam], [lParam]
    jmp     .exit

.wmDESTROY:
    invoke  PostQuitMessage, 0

.exit:
    ret

endp
;----------------------------------------------------------------<the window procedure>----


;===============================================================================[IDATA]====
section '.idata' import data readable writeable

    library kernel32, 'KERNEL32.DLL',\
	    user32,   'USER32.DLL'

    include '%fasminc%\api\kernel32.inc'
    include '%fasminc%\api\user32.inc'

;==========================================================================================



Последнее обновление : 25 января 2008
Hosted by uCoz