MouseEventArgs.X是什么类型?

| 在Visual Studio 2008(.NET 3.5)中使用C#。看着
System.Windows.Forms.MouseEventArgs
。 当我截取
MouseMove
事件时,我看到长面板的奇怪行为。看来ѭ2从0到32767,然后回绕到-32768。 当我在Visual Studio中观看变量时,它声称它的类型为“ 3”。 显然,它是一个16位有符号整数,它的行为方式。这是真的?这是硬性限制吗? 谢谢!     
已邀请:
这可能是由于Windows窗体基本上是围绕C Windows API的.NET包装。对于WM_MOUSEMOVE和相关消息(WM_LBUTTONDOWN等),鼠标坐标在LPARAM参数中发送。 LPARAM是LONG_PTR的typedef,在32位Windows(仅)上,LONG_PTR长期以来都是typedef。正如WM_MOUSEMOVE的文档所述,您可以使用GET_X_LPARAM和GET_Y_LPARAM宏来获取光标位置,这两个宏分别返回低序int和高序int。 由于该值以32位开头(在32位Windows上),因此,唯一有意义的方法是x和y坐标实际上是16位值。基于windowsx.h中GET_X_LPARAM的定义,我还会猜到(但没有官方消息说),即使在x64上,也仅将LPARAM的低32位用于鼠标坐标。     
代替在鼠标移动事件中使用位置,请使用:
PointToClient(Cursor.Position)
Microsoft可以轻松地在其.Net包装器中执行此操作。他们不这样做可能有正当的理由,但似乎对我有用。     

要回复问题请先登录注册