參考資訊:
http://www.winprog.org/tutorial/
http://winapi.freetechsecrets.com/win32/
https://github.com/gammasoft71/Examples_Win32
http://masm32.com/board/index.php?topic=3584.0
https://learn.microsoft.com/en-us/windows/win32/winmsg/window-styles
WM_MOUSEMOVE
fwKeys = wParam; // key flags xPos = LOWORD(lParam); // horizontal position of cursor yPos = HIWORD(lParam); // vertical position of cursor
main.s
.include "head.inc"
.text
WndProc:
push { lr }
cmp r1, #WM_MOUSEMOVE
beq handle_mouse
cmp r1, #WM_CLOSE
beq handle_close
cmp r1, #WM_DESTROY
beq handle_destroy
b handle_default
handle_mouse:
push { r0 }
ldr r0, =0xffff
mov r2, r3, lsr #16
and r2, r2, r0
and r3, r3, r0
ldr r1, =FMT_MOUSE
ldr r0, =pBuf
bl sprintf
ldr r1, =pBuf
pop { r0 }
bl SetWindowTextA
eor r0, r0
b finish
handle_close:
bl DestroyWindow
eor r0, r0
b finish
handle_destroy:
ldr r0, =0
bl PostQuitMessage
eor r0, r0
b finish
handle_default:
push { r3 }
mov r3, r2
mov r2, r1
mov r1, r0
ldr r0, =pDefWndProc
ldr r0, [r0]
bl CallWindowProcA
add sp, sp, #4
b finish
finish:
pop { pc }
WinMain:
push { lr }
ldr r3, =0
ldr r2, =0
ldr r1, =0
ldr r0, =0
push { r0, r1, r2, r3 }
ldr r3, =300
ldr r2, =300
ldr r1, =0
ldr r0, =0
push { r0, r1, r2, r3 }
ldr r3, =WS_OVERLAPPEDWINDOW | WS_VISIBLE
ldr r2, =szAppName
ldr r1, =WC_DIALOG
ldr r0, =WS_EX_LEFT
bl CreateWindowExA
add sp, sp, #32
ldr r1, =hWin
str r0, [r1]
ldr r2, =WndProc
ldr r1, =GWL_WNDPROC
bl SetWindowLongA
ldr r1, =pDefWndProc
str r0, [r1]
loop:
ldr r3, =0
ldr r2, =0
ldr r1, =0
ldr r0, =szMsg
bl GetMessageA
cmp r0, #0
beq exit
ldr r0, =szMsg
bl DispatchMessageA
b loop
exit:
mov r0, #0
bl ExitProcess
pop { pc }
Line 14~26:將滑鼠座標顯示在視窗標題
編譯、執行
$ winegcc main.s -o main $ wine ./main.exe