В win32 (windows.h) есть удобная функция, которая конвертирует lParam в POINT?

Я продолжаю делать следующее:

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)?

5

Решение

Нет, но было бы тривиально накатить свои собственные:

POINT ToPoint(LPARAM lParam)
{
POINT p={GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam)};

return p;
}
6

Другие решения

использование 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 обрабатывать координаты как беззнаковые величины.

10

использование CPoint, лайк CPoint p(lParam);

5

Не напрямую но есть GET_X_LPARAM() и соответствующий для Y.

1
По вопросам рекламы [email protected]