|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
正在学习小甲鱼老师的win32汇编,为了学习窗口消息,在消息过程中写了几段简单的程序:
捕捉WM_LBUTTONDOWN的鼠标消息,把点击的鼠标坐标显示在窗口中:
;--------变量定义
szZBText db 'X坐标是%d,Y坐标是%d',0
szZBBuffer db 20 dup (?)
wZB_X dw ?
wZB_Y dw ?
;--------消息过程函数处理WM_PAINT和WM_LBUTTONDOWN部分
.if eax == WM_PAINT
invoke BeginPaint,hWnd,addr @stPs
mov @hDc,eax
invoke GetClientRect,hWnd,addr @stRect
invoke DrawText,@hDc,addr szZBBuffer,-1,\
addr @stRect,\
DT_SINGLELINE or DT_CENTER or DT_VCENTER
invoke EndPaint,hWnd,addr @stPs
.elseif eax == WM_LBUTTONDOWN
mov eax,lParam
mov wZB_X,ax ;lPARAM参数的低16位表示坐标X
mov cl,16
shr eax,cl ;高16位右移至ax寄存器
mov wZB_Y,ax
invoke wsprintf,addr szZBBuffer,addr szZBText,wZB_X,wZB_Y
invoke InvalidateRect,hWnd,NULL,1
现在的问题是X坐标显示正确,Y坐标显示是一个很大的数。
但是如果我只显示一个X或者Y就是正确的:
invoke wsprintf,addr szZBBuffer,addr szZBText,wZB_X 或
invoke wsprintf,addr szZBBuffer,addr szZBText,wZB_Y
有大神能看下原因吗,个人感觉是不是wsprintf的参数设置错了?
|
|