我想在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'仍然會產生算術溢出的問題,所以我就建在我的頭上。 :-) –