Pushok icon

Asm window application skeleton

Pushok | PRO | 04/02/11 01:41:18 PM UTC | 0 ⭐ | 489 👁️ | Never ⏰ | []
ASM (NASM) |

0 B

|

None

|

0 👍

/

0 👎

.386
.model flat,stdcall
option   casemap:none
    include \masm32\INCLUDE\windows.INC
        include \masm32\include\gdi32.inc
        include \masm32\include\user32.inc
        include \masm32\include\kernel32.inc
    include \masm32\INCLUDE\advapi32.INC
 
        includelib \masm32\lib\gdi32.lib
        includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\advapi32.lib 
    includelib \masm32\lib\comctl32.lib
    
.DATA
    hinst DWORD 0
    hwnd DWORD 0
    
    WindowClass db "Window", 0
    WindowName db "Caption", 0
    
    MSG_Handle MSG <0>
.CODE
START:
    invoke GetModuleHandle, 0
    mov hinst, eax
    call Reg_Win_Class
    test eax,eax
    jz EXIT
    
    invoke CreateWindowEx, 0, addr WindowClass, addr WindowName, \
        WS_VISIBLE + WS_SYSMENU, 640, 480, 640, 480, 0, 0, hinst, 0
        
    mov hwnd, eax
    
    invoke ShowWindow, hwnd, 1
    invoke UpdateWindow, hwnd
    
Msg_Loop:
    
    invoke GetMessage, addr MSG_Handle, 0, 0, 0
    test eax,eax
    jz EXIT
    
    invoke TranslateMessage, addr MSG_Handle
    invoke DispatchMessage, addr MSG_Handle
    
    jmp Msg_Loop
EXIT:
    invoke  ExitProcess, 0
 
Reg_Win_Class proc
    local _WndClassStruct : WNDCLASS
    
    mov _WndClassStruct.style, 0
    mov _WndClassStruct.lpfnWndProc, WinProc
        mov _WndClassStruct.cbClsExtra, 0
        mov _WndClassStruct.cbWndExtra, 0
    push hinst
    pop _WndClassStruct.hInstance
    mov _WndClassStruct.lpszMenuName, 0
    mov _WndClassStruct.lpszClassName, offset WindowClass
    
    invoke LoadIcon, 0, 0
    mov _WndClassStruct.hIcon, eax
    
    invoke LoadCursor, 0, IDC_ARROW
    mov _WndClassStruct.hCursor, eax
    
    invoke CreateSolidBrush, 0ffffffh
    mov _WndClassStruct.hbrBackground, eax
    
    invoke RegisterClassA, addr _WndClassStruct
ret
Reg_Win_Class endp
 
WinProc proc \
        uses ebx esi edi hWnd :DWORD, MESS :DWORD, wParam :DWORD, lParam :DWORD
    
    cmp MESS, WM_DESTROY
    je  DESTROY_WIN
 
    invoke DefWindowProc, hWnd, MESS, wParam, lParam
    jmp ENDPROCEDURE
    
DESTROY_WIN:
    invoke PostQuitMessage, 0
    
ENDPROCEDURE:
ret 16
WinProc endp
END  START

Comments