A UASM window with no Microsoft components used in its build.
UASM assembler
POLINK linker
PORC resource compiler
The source is attached but it cannot be directly built as it assumes bits and pieces from all over my DEV drive but the exe runs correctly, it has an icon, manifest and version control block.
The "sauce".
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
include \uasm\include\uasm64rt.inc
button PROTO :PTR,:PTR,:PTR,:PTR,:PTR,:PTR,:PTR,:PTR
iMsgbox PROTO :PTR,:PTR,:PTR,:PTR,:PTR
.data?
hInstance dq ?
hWnd dq ?
hIcon dq ?
hCursor dq ?
sWid dq ?
sHgt dq ?
hBrush dq ?
butn1 dq ?
butn2 dq ?
.data
classname db "template_class",0
caption db "UASM Template",0
.code
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
entry_point proc
mov hInstance, rv(GetModuleHandle,0)
mov hIcon, rv(LoadIcon,hInstance,10)
mov hCursor, rv(LoadCursor,0,IDC_ARROW)
mov sWid, rv(GetSystemMetrics,SM_CXSCREEN)
mov sHgt, rv(GetSystemMetrics,SM_CYSCREEN)
mov hBrush, rv(CreateSolidBrush,00666666h)
call main
close
entry_point endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
main proc
LOCAL wc :WNDCLASSEX
LOCAL lft :QWORD
LOCAL top :QWORD
LOCAL wid :QWORD
LOCAL hgt :QWORD
mov wc.cbSize, SIZEOF WNDCLASSEX
mov wc.style, CS_BYTEALIGNCLIENT or CS_BYTEALIGNWINDOW
mov wc.lpfnWndProc, ptr$(WndProc)
mov wc.cbClsExtra, 0
mov wc.cbWndExtra, 0
mrm wc.hInstance, hInstance
mrm wc.hIcon, hIcon
mrm wc.hCursor, hCursor
mrm wc.hbrBackground, hBrush
mov wc.lpszMenuName, 0
mov wc.lpszClassName, ptr$(classname)
mrm wc.hIconSm, hIcon
invoke RegisterClassEx,ADDR wc
mov wid, 800
mov hgt, 450
mov rax, sWid ; calculate offset from left side
sub rax, wid
shr rax, 1
mov lft, rax
mov rax, sHgt ; calculate offset from top edge
sub rax, hgt
shr rax, 1
mov top, rax
invoke CreateWindowEx,WS_EX_LEFT or WS_EX_ACCEPTFILES, \
ADDR classname,ADDR caption, \
WS_OVERLAPPEDWINDOW or WS_VISIBLE,\
lft,top,wid,hgt,0,0,hInstance,0
mov hWnd, rax
call msgloop
ret
main endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
msgloop proc
LOCAL msg :MSG
LOCAL pmsg :QWORD
mov pmsg, ptr$(msg) ; get the msg structure address
jmp gmsg ; jump directly to GetMessage()
mloop:
invoke TranslateMessage,pmsg
invoke DispatchMessage,pmsg
gmsg:
test rax, rv(GetMessage,pmsg,0,0,0) ; loop until GetMessage returns zero
jnz mloop
ret
msgloop endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
WndProc proc hWin:PTR,uMsg:PTR,wParam:PTR,lParam:PTR
.if uMsg == WM_COMMAND
.if wParam == 100
invoke iMsgbox,hWin,"Button 1 was pressed","Information",MB_OK,10
.elseif wParam == 200
jmp bye
.elseif wParam == 300
Invoke iMsgbox,hWin,"UASM 64 Bit Template","About",MB_OK,10
.endif
.elseif uMsg == WM_CREATE
invoke LoadMenu,hInstance,100
invoke SetMenu,hWin,rax
mov butn1, rv(button,hInstance,hWin,"Button 1",50,40,100,20,100)
mov butn2, rv(button,hInstance,hWin,"Close",50,65,100,20,200)
xor rax, rax
ret
.elseif uMsg == WM_CLOSE
bye:
invoke SendMessage,hWin,WM_DESTROY,0,0
.elseif uMsg == WM_DESTROY
invoke PostQuitMessage,NULL
.endif
invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
WndProc endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
button proc instance:PTR,hparent:PTR,text:PTR,topx:PTR,topy:PTR,wid:PTR,hgt:PTR,idnum:PTR
invoke CreateWindowEx,0,"BUTTON",text, \
WS_CHILD or WS_VISIBLE,\
topx,topy,wid,hgt,hparent,idnum,instance,0
ret
button endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
iMsgbox proc hParent:PTR,pText:PTR,pTitle:PTR,mbStyle:PTR,IconID:PTR
LOCAL mbp :MSGBOXPARAMSxx
or mbStyle, MB_USERICON
mov mbp.cbSize, SIZEOF mbp
mrm mbp.hwndOwner, hParent
mov mbp.hInstance, rv(GetModuleHandle,0)
mrm mbp.lpszText, pText
mrm mbp.lpszCaption, pTitle
mov rax, mbStyle
mov mbp.dwStyle, eax
mrm mbp.lpszIcon, IconID
mov mbp.dwContextHelpId, NULL
mov mbp.lpfnMsgBoxCallback, NULL
mov mbp.dwLanguageId, NULL
invoke MessageBoxIndirect,ADDR mbp
ret
iMsgbox endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
end