被坐标和像素两概念弄蒙了,坐标移1就是1个像素吗[已解决]
本帖最后由 z761003 于 2022-6-25 23:22 编辑今天在调试一个鼠标拖动同时在屏幕上画个框的程序代码,发现在WIN7里正常,换到分辨率更高的WIN10笔记本电脑上不正常了,鼠标指针所在矩形小,画出来的框却要大些。
更仔细发现AU3里坐标100,好像不是系统的第100个像素。。。
上图,位置1是我鼠标从屏幕左上角拖动后终点位置,底部显示用MouseGetPos测得的位置为100*100; 图中2的位置是我用winmove移动控制面板窗口到坐标100*100的位置,且我用代码画的框右下角也在2的位置。
两者不在同一个位置。
另外我用截图软件截100*100像素的图片,发现也在1的位置
结论:MouseGetPos取到的和鼠标实际位置和截图软件 这三项是匹配的,但和winmove和画线代码是不匹配的,下面是我画线的代码
#include <GDIPlus.au3>
#include <WinAPI.au3>
#include <Misc.au3>
#include <GuiConstants.au3>
#include <WindowsConstants.au3>
Global $MouseGui = GUICreate("pen", 1, 1, 1, 1, BitOR($WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS), _
BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
GUISetBkColor(0xFF0000, $MouseGui)
pen_DrawGuiRgn(2, 2, 100, 100, 0, 0)
Sleep(10000)
Func pen_DrawGuiRgn($BORDER_LF_RI_SIZE, $BORDER_TO_BO_SIZE, $WIDTH, $HEIGHT, $LEFT, $TOP) ;识图笔刷
Local $W = $BORDER_LF_RI_SIZE * 2 + $WIDTH
Local $H = $BORDER_TO_BO_SIZE * 2 + $HEIGHT
_WinAPI_SetWindowPos($MouseGui, 0, $LEFT, $TOP, $LEFT + $W, $TOP + $H, 0)
;Sleep(20) 自删
Local $hREG1 = _WinAPI_CreateRectRgn(0, 0, $W, $H)
Local $hREG2 = _WinAPI_CreateRectRgn($BORDER_LF_RI_SIZE, $BORDER_TO_BO_SIZE, $BORDER_LF_RI_SIZE + $WIDTH, $BORDER_TO_BO_SIZE + $HEIGHT)
Local $hREG3 = _WinAPI_CreateRectRgn(0, 0, 0, 0)
_WinAPI_CombineRgn($hREG3, $hREG1, $hREG2, $RGN_DIFF)
_WinAPI_DeleteObject($hREG1)
_WinAPI_DeleteObject($hREG2)
_WinAPI_SetWindowRgn($MouseGui, $hREG3)
_WinAPI_DeleteObject($hREG3)
GUISetState(@SW_SHOW, $MouseGui)
EndFunc
#CS
$A=WinGetHandle("控制面板")
WinActivate($A)
WinMove($A,"",100,100)
While 1
Local $ls=MouseGetPos()
CW($LS&"+"&$LS)
WEnd
#CE
代码如何修改才能在WIN10下正常,请明白指点下,谢谢
目测win10屏幕缩放了150%,DPI 本帖最后由 z761003 于 2022-6-25 14:47 编辑
afan 发表于 2022-6-25 10:30
目测win10屏幕缩放了150%,DPI
好像是有这么回事,,,不知道是不是所有的WIN10都缩放这个比例 z761003 发表于 2022-6-25 14:27
好像是有这么回事,,,不知道是不是所有的WIN10都缩放这个比例
WIN7与WIN10分辨率会一样吗? chzj589 发表于 2022-6-25 14:59
WIN7与WIN10分辨率会一样吗?
我用的两系统分辨率不一样的 按afan提示的,加了两行代码$WIDTH=$WIDTH*100/150 和 $HEIGHT=$HEIGHT*100/150,即缩了150%后,如果在左上角画,正常了,不过在屏幕中间或右下位置画,还是一样鼠标和框不在同个位置,看来可能是画框的代码不兼容WIN10 z761003 发表于 2022-6-25 16:09
按afan提示的,加了两行代码$WIDTH=$WIDTH*100/150 和 $HEIGHT=$HEIGHT*100/150,即缩了150%后,如果在左上 ...
我提示的是 DPI
你可以禁用DPI感知,这是最简单的,你如果搜索关键字DPI就会有收获
也可以根据缩放比例调整坐标。你上面的测试调整了宽高,却没有调整XY afan 发表于 2022-6-25 16:26
我提示的是 DPI
你可以禁用DPI感知,这是最简单的,你如果搜索关键字DPI就会有收获
也可以根据缩放比例 ...
谢谢提示,确实是DPI的缩放引起,我已经偺了调整
页:
[1]