我想在VB.net中使用DWORD WINAPI GetMessagePos(void)函数。VB.net整数和短转换,GetMessagePos()
函数返回一个DWORD(32位),它可以存储在VB.net整型变量中。从MSDN文档引用:
x坐标位于返回值的低位;在 y坐标处于高位短(两者都代表签署价值 ,因为他们可以利用负值的系统上有多个 显示器)
我怎样才能检索到的X和Y坐标用vb.net?
我目前正在
<System.Runtime.InteropServices.DllImport("user32.dll", ExactSpelling:=True)>
Private Shared Function GetMessagePos() As Integer
End Function
Sub test()
Dim pos As Integer = GetMessagePos()
Try
Dim x As Short = CShort(pos And &HFFFF)
Dim y As Short = CShort(pos >> 16)
MessageBox.Show(x & ", " & y)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
,但我不知道这是否是做正确的方式。我试图做一些测试,如
Try
Dim x As Short = -1
Dim y As Short = 1
Dim i As Int32 = (y << 16) Or x
Dim x2 As Short = CShort(i And &HFFFF)
Dim y2 As Short = CShort(i >> 16)
MessageBox.Show(x & ", " & y)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
基本上我码x和y坐标在短期(Int16的)变量,把它们放在一起的的Int32,然后尝试进行解码。
但它似乎不工作,因为它导致溢出。
如何从GetMessagePos()
WINAPI解码x-y坐标的任何想法?
我刚刚测试了这个使用在线VB.NET编译器和它的工作。以65537作为输入开始,我按照预期得到(-1,1)的坐标。你的测试代码在构建'i'仍然会产生算术溢出的问题,所以我就建在我的头上。 :-) –