satpro icon

Create Main Window

satpro | PRO | 02/16/26 02:49:47 PM UTC | 0 ⭐ | 13891 👁️ | Never ⏰ | [asm, x86-64]
ASM (NASM) |

0 B

|

Source Code

|

0 👍

/

0 👎

 
 
 
 
; ========================================================================================
 
align 16
export Window_Startup:
 
  sub rsp, 78h
 
  mov [rsp+60h], rsi
  mov [rsp+68h], rdi
  mov [rsp+70h], rbx
 
; -----  Enter  -----
 
 
; ----------------------------
; clear WNDCLASSEXA stucture
; ----------------------------
  lea edi, win                                    ; win = address of the structure
  mov ecx, 10                                     ; ecx: loop limit = # of bytes / 8
  xor eax, eax                                    ; eax: fillvalue = 0
  dec ecx                                         ; ecx: loop counter - 1
 
; loop
: mov [edi+ecx*8], rax                            ; use indexed*8 addressing
  dec ecx
  jns <                                           ; until loop counter = loop limit
 
; --------------------------------------
;     fill the WNDCLASSEXA structure
; --------------------------------------
  mov D[win.cbSize], sizeof(WNDCLASSEXA)          ; (50h) structure size in bytes
 
  mov rax, [hInstance]                            ; get program's instance handle
  mov   [win.hInstance], rax                        ; store handle in the window structure
    
  lea ebx, ClassName
  lea eax, WndProc
  mov [win.lpszClassName], ebx                    ; ptr to window class name
  mov [win.lpfnWndProc], eax                      ; ptr to window procedure
 
 
; win.hbrBackground = CreateSolidBrush(RGB(color));
  mov ecx, 0 ;AlmostBlack                            ; p1:  COLORREF crColor (brush color)
  mov [GUISkinColor], ecx                         ; save a copy for gui updates
 
; convert the color to Windows: bgr = rgb
  bswap ecx                   ; flip the alpha channel into bits 0-7
  shr ecx, 8                  ; get rid of bits 0-7
 
  call CreateSolidBrush       ; returns: handle of a logical brush for LoadCursor
    test rax, rax
    jz >> wcError
  mov [win.hbrBackground], rax                    ; store the handle
 
; ----------------------------
;     load the hand cursor
; ----------------------------
  xor ecx, ecx                                    ; p1: NULL
  mov edx, IDC_HAND                               ; p2: const for the hand
  call LoadCursorA
    test rax, rax
    jz >> wcError
 
  mov [win.hCursor], rax                          ; = hand cursor
 
; ----------------------------
;     register the window
; ----------------------------
  lea ecx, win                ; p1: &win
  call RegisterClassExA       ; register the window
    test eax, eax
    jz >> wcError
 
; --------------------------------------
;   create a centered 1920x1080 window
; --------------------------------------
  xor ecx, ecx                ; p1: DWORD dwExStyle (0)
  lea edx, ClassName          ; p2: LPCTSTR lpClassName
  lea r8d, WindowTitle        ; p3: LPCTSTR lpWindowName
  mov r9d, WS_POPUP+WS_VISIBLE ; p4: DWORD dwStyle
    
  mov [rsp+20h], ecx          ; p5: int x (x=0)
  mov [rsp+28h], ecx          ; p6: int y (y=0)
 
  mov eax, [monitor_w]
  mov ebx, [monitor_h]
  mov [rsp+30h], eax          ; p7: int nWidth (monitor width)
  mov [rsp+38h], ebx          ; p8: int nHeight (monitor height)
 
  mov [rsp+40h], rcx          ; p9: HWND hWndParent (0 = top level)
  mov [rsp+48h], rcx          ; p10: HMENU hMenu (0 = no menu)
 
  mov rax, [hInstance]
  mov [rsp+50h], rax          ; p11: HINSTANCE hInstance
 
  mov [rsp+58h], rcx          ; p12: LPVOID lpParam  (0)
 
; ------------------
; create the window
; ------------------
  call CreateWindowExA
    test rax, rax
    jz >> wcError
 
  mov [hWindow], rax     ; store the window handle
 
; ---------------
; hide the cursor
; ---------------
  mov ecx, 0
  call ShowCursor
 
 
; ----- REPORT SUCCESS -----
 
  mov eax, TRUE     ; 1 signals success
 
 
; ----- EXIT -----
 
; if eax = 0, then an error occurred
wcError:
  mov rsi, [rsp+60h]
  mov rdi, [rsp+68h]
  mov rbx, [rsp+70h]
  add rsp, 78h
 
  ret
 
; ========================================================================================
 

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎