2013-02-27 119 views
0

我必須爲自定義繪製的WPF窗口發送一些手動Windows消息。具體來說,當用戶在標題欄中將鼠標放下時,我不得不手動發送WM_NCLBUTTONDOWN消息。如何將屏幕鼠標座標轉換爲POINTS結構

到目前爲止,我有:

[DllImport("user32.dll")] 
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); 

有趣的部分是越來越值裝進lParam的。它需要是代表鼠標的X和Y座標的Int32(DWORD)。

有一個macro defined創建必要的結構,但它不是幫助我。所以,問題是這樣的:

在一個WPF窗口中,如何正確地激發這個消息,並傳入正確的值作爲lParam參數?

回答

2
lParam = x | (y << 16); 

其中x和y是座標。

從郵件中提取值:

int x = lParam & 0xFFFF; 
int y = (lParam >> 16) & 0xFFFF; 
+0

非常感謝 - 工作的一種享受。 – Avram 2013-02-27 14:02:39

+0

這將失敗,並帶有負面的鼠標座標。 – arx 2013-02-27 17:05:57

1

對方回答將失敗,負鼠座標,這當你有多個監視器您可能會看到。我認爲這將工作:

int lParam = (ushort)x | (y << 16); 

x = (short)lParam; 
y = (short)(lParam >> 16); 
+0

如果有其他人試圖弄清楚爲什麼這在Java中不起作用,那麼Java會使用int進行按位操作。所以即使你把它縮短它也不適用於負x值 – acheron55 2015-01-06 00:03:16

相關問題