Pushok

Win app with controls in Assembly

Apr 2nd, 2011
510
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 "ThisName", 0
  22.     ButtonClass db "BUTTON", 0
  23.     HelloWorld db "Hello, World", 0
  24.    
  25.     MSG_Handle MSG <0>
  26. .CODE
  27. START:
  28.     invoke GetModuleHandle, 0
  29.     mov hinst, eax
  30.     call Reg_Win_Class
  31.     test eax,eax
  32.     jz EXIT
  33.    
  34.     invoke CreateWindowEx, 0, addr WindowClass, addr WindowName, \
  35.         WS_SYSMENU + WS_VISIBLE, 640, 480, 195, 110, 0, 0, hinst, 0
  36.        
  37.     mov hwnd, eax
  38.    
  39.     invoke ShowWindow, hwnd, 1
  40.     invoke UpdateWindow, hwnd
  41.    
  42. Msg_Loop:
  43.    
  44.     invoke GetMessage, addr MSG_Handle, 0, 0, 0
  45.     test eax,eax
  46.     jz EXIT
  47.    
  48.     invoke TranslateMessage, addr MSG_Handle
  49.     invoke DispatchMessage, addr MSG_Handle
  50.    
  51.     jmp Msg_Loop
  52. EXIT:
  53.     invoke  ExitProcess, 0
  54.  
  55. Reg_Win_Class proc
  56.     local _WndClassStruct : WNDCLASS
  57.    
  58.     mov _WndClassStruct.style, 0
  59.     mov _WndClassStruct.lpfnWndProc, WinProc
  60.         mov _WndClassStruct.cbClsExtra, 0
  61.         mov _WndClassStruct.cbWndExtra, 0
  62.     push hinst
  63.     pop _WndClassStruct.hInstance
  64.     mov _WndClassStruct.lpszMenuName, 0
  65.     mov _WndClassStruct.lpszClassName, offset WindowClass
  66.    
  67.     invoke LoadIcon, 0, 0
  68.     mov _WndClassStruct.hIcon, eax
  69.    
  70.     invoke LoadCursor, 0, IDC_ARROW
  71.     mov _WndClassStruct.hCursor, eax
  72.    
  73.     invoke CreateSolidBrush, 0ffffffh
  74.     mov _WndClassStruct.hbrBackground, eax
  75.    
  76.     invoke RegisterClassA, addr _WndClassStruct
  77. ret
  78. Reg_Win_Class endp
  79.  
  80. WinProc proc \
  81.         uses ebx esi edi hWnd :DWORD, MESS :DWORD, wParam :DWORD, lParam :DWORD
  82.    
  83.     cmp MESS, WM_CREATE
  84.     je CREATE_WIN
  85.    
  86.     cmp MESS, WM_DESTROY
  87.     je  DESTROY_WIN
  88.    
  89.     cmp MESS, WM_COMMAND
  90.     je COMMAND_WIN
  91.  
  92. DEFPROC:
  93.     invoke DefWindowProc, hWnd, MESS, wParam, lParam
  94.     jmp ENDPROCEDURE
  95.    
  96. CREATE_WIN:
  97.     invoke CreateWindowEx, 0, addr ButtonClass, addr WindowName, WS_CHILD + WS_VISIBLE + WS_BORDER + BS_PUSHBUTTON, 20, 20, 150, 40, hWnd, 1, hinst, 0
  98.     jmp ENDPROCEDURE
  99.    
  100. DESTROY_WIN:
  101.     invoke PostQuitMessage, 0
  102.     jmp ENDPROCEDURE
  103.    
  104. COMMAND_WIN:
  105.     mov eax, wParam
  106.     shr eax, 16
  107.     cmp eax, BN_CLICKED
  108.     jne DEFPROC
  109.    
  110.     mov eax, wParam
  111.     and eax, 0FFFFh
  112.     cmp eax, 1
  113.     jne DEFPROC
  114.    
  115.     invoke MessageBox, hWnd, addr HelloWorld, addr HelloWorld, MB_OK
  116.    
  117.    
  118. ENDPROCEDURE:
  119. ret 16
  120. WinProc endp
  121. END  START
Advertisement
Add Comment
Please, Sign In to add comment