Pushok

Asm window application skeleton

Apr 2nd, 2011
501
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .386
  2. .model flat,stdcall
  3. option   casemap:none
  4.     include \masm32\INCLUDE\windows.INC
  5.         include \masm32\include\gdi32.inc
  6.         include \masm32\include\user32.inc
  7.         include \masm32\include\kernel32.inc
  8.     include \masm32\INCLUDE\advapi32.INC
  9.  
  10.         includelib \masm32\lib\gdi32.lib
  11.         includelib \masm32\lib\user32.lib
  12.     includelib \masm32\lib\kernel32.lib
  13.     includelib \masm32\lib\advapi32.lib
  14.     includelib \masm32\lib\comctl32.lib
  15.    
  16. .DATA
  17.     hinst DWORD 0
  18.     hwnd DWORD 0
  19.    
  20.     WindowClass db "Window", 0
  21.     WindowName db "Caption", 0
  22.    
  23.     MSG_Handle MSG <0>
  24. .CODE
  25. START:
  26.     invoke GetModuleHandle, 0
  27.     mov hinst, eax
  28.     call Reg_Win_Class
  29.     test eax,eax
  30.     jz EXIT
  31.    
  32.     invoke CreateWindowEx, 0, addr WindowClass, addr WindowName, \
  33.         WS_VISIBLE + WS_SYSMENU, 640, 480, 640, 480, 0, 0, hinst, 0
  34.        
  35.     mov hwnd, eax
  36.    
  37.     invoke ShowWindow, hwnd, 1
  38.     invoke UpdateWindow, hwnd
  39.    
  40. Msg_Loop:
  41.    
  42.     invoke GetMessage, addr MSG_Handle, 0, 0, 0
  43.     test eax,eax
  44.     jz EXIT
  45.    
  46.     invoke TranslateMessage, addr MSG_Handle
  47.     invoke DispatchMessage, addr MSG_Handle
  48.    
  49.     jmp Msg_Loop
  50. EXIT:
  51.     invoke  ExitProcess, 0
  52.  
  53. Reg_Win_Class proc
  54.     local _WndClassStruct : WNDCLASS
  55.    
  56.     mov _WndClassStruct.style, 0
  57.     mov _WndClassStruct.lpfnWndProc, WinProc
  58.         mov _WndClassStruct.cbClsExtra, 0
  59.         mov _WndClassStruct.cbWndExtra, 0
  60.     push hinst
  61.     pop _WndClassStruct.hInstance
  62.     mov _WndClassStruct.lpszMenuName, 0
  63.     mov _WndClassStruct.lpszClassName, offset WindowClass
  64.    
  65.     invoke LoadIcon, 0, 0
  66.     mov _WndClassStruct.hIcon, eax
  67.    
  68.     invoke LoadCursor, 0, IDC_ARROW
  69.     mov _WndClassStruct.hCursor, eax
  70.    
  71.     invoke CreateSolidBrush, 0ffffffh
  72.     mov _WndClassStruct.hbrBackground, eax
  73.    
  74.     invoke RegisterClassA, addr _WndClassStruct
  75. ret
  76. Reg_Win_Class endp
  77.  
  78. WinProc proc \
  79.         uses ebx esi edi hWnd :DWORD, MESS :DWORD, wParam :DWORD, lParam :DWORD
  80.    
  81.     cmp MESS, WM_DESTROY
  82.     je  DESTROY_WIN
  83.  
  84.     invoke DefWindowProc, hWnd, MESS, wParam, lParam
  85.     jmp ENDPROCEDURE
  86.    
  87. DESTROY_WIN:
  88.     invoke PostQuitMessage, 0
  89.    
  90. ENDPROCEDURE:
  91. ret 16
  92. WinProc endp
  93. END  START
Advertisement
Add Comment
Please, Sign In to add comment