Я продолжаю делать следующее:
LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
mouse.x = LOWORD(lParam);
mouse.y = HIWORD(lParam);
// ...
return 0;
}
Интересно, есть ли удобный метод, который преобразует LOWORD(lParam)
а также HIWORD(lParam)
к Point
для меня? Чтобы я мог сделать что-то вроде mouse = ToPoint(lParam)
?
Нет, но было бы тривиально накатить свои собственные:
POINT ToPoint(LPARAM lParam)
{
POINT p={GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam)};
return p;
}
использование GET_X_LPARAM()
а также GET_Y_LPARAM()
, или же MAKEPOINTS()
, словно WM_MOUSEMOVE
документация говорит:
Используйте следующий код для получения горизонтального и вертикального положения:
xPos = GET_X_LPARAM (лПарам);
yPos = GET_Y_LPARAM (лПарам);
Как отмечено выше, координата х находится в младшем порядке короткая возвращаемого значения; Y-координата находится в старшем порядке короткая (оба представляют подписанный значения, потому что они могут принимать отрицательные значения в системах с несколькими мониторами). Если возвращаемое значение присваивается переменной, вы можете использовать
MAKEPOINTS
макрос для полученияPOINTS
структура из возвращаемого значения. Вы также можете использоватьGET_X_LPARAM
или жеGET_Y_LPARAM
макрос для извлечения x- или y-координаты.Важный Не используйте
LOWORD
или жеHIWORD
макросы для извлечения x- и y-координат позиции курсора, потому что эти макросы возвращают неверные результаты в системах с несколькими мониторами. Системы с несколькими мониторами могут иметь отрицательные координаты x и y, и LOWORD а также HIWORD обрабатывать координаты как беззнаковые величины.
использование CPoint
, лайк CPoint p(lParam);
Не напрямую но есть GET_X_LPARAM()
и соответствующий для Y.