I do not have tested ok, I do not have winx86-64, but, if you have function below:
WndProc proc hWnd:Qword,uMsg:dword,wParam:dword,lParam:dword
ret
WndProc endp
But parameters are passed by registers rcx,rdx,r8,r9
so, dwords turns into qwords.
WndProc proc hWnd:qword,uMsg:qword,wParam:qword,lParam:qword
mov hWnd,rcx
mov uMsg,rdx
mov wParam,r8
mov lParam,r9
ret
WndProc endp
And above code is supposed the same as below
WndProc proc hWnd:qword,uMsg:qword,wParam:qword,lParam:qword
mov hWnd,rcx ;<-qword
mov uMsg,edx
mov wParam,r8d ;<-dword
mov lParam,r9d
;----above is prologue of this code
;here goes your code
;---below is epilogue of this code, supose you don't remember if registers rcx and rdx is trashed
;so you move from function parameter to register back again
mov rcx,hWnd
mov rdx,uMsg
mov r8,wParam
mov r9,lParam
call DefWindowProc
;...
ret
WndProc endp
---edited---
inserted defwindowproc.