2012-09-03 60 views
4

我已經爲鼠標創建了一個鉤子。我想獲得鼠標點擊座標,但GET_X_LPARAM()會給我一個負值(當點擊不同的地方時總是一樣)。我的問題通過GetCursorPos()解決,但我想知道爲什麼它不適用於GET_X_LPARAM/GET_Y_LPARAM。下面的代碼:GET_X_LPARAM給出負值

LRESULT CALLBACK Recorder::mouseHook(int code, WPARAM wParam, LPARAM lParam) { 
if(code < 0) 
    return CallNextHookEx(m_mouseHook, code, wParam, lParam); 

switch(wParam) { 
    case WM_LBUTTONDOWN:{ 
     int _hereIsANegativeNumber = GET_X_LPARAM(lParam); 
     break;} 
} 

return CallNextHookEx(0, code, wParam, lParam); 
} 

我這是怎麼設定的掛鉤:

m_mouseHook = SetWindowsHookEx(WH_MOUSE_LL, &mouseHook, GetModuleHandle(NULL), 0); 

回答

7

WH_MOUSE_LL鉤,lParam不是鼠標座標 - 相反,它是一個指向MSLLHOOKSTRUCT

因此,要獲得座標:

POINT pt = reinterpret_cast<MSLLHOOKSTRUCT*>(lParam)->pt; 

詳情請參閱LowLevelMouseProc