WM_MOUSEMOVE - упаковка x и y позиций - PullRequest
2 голосов
/ 13 декабря 2011

Я использую грубую систему для управления Flash-фильмом из программы на C ++ / win32, отправляя события WM_MOUSEMOVE непосредственно в окно Flash.

Это хорошо работает для одной оси:

SendMessage( m_targetWindowHWND, WM_MOUSEMOVE, 0, xpos);

Однако я бы хотел сейчас отправить значения x и y.Я знаю, что они упакованы в lparam WM_MOUSEMOVEs.В C ++ это может быть распаковано с помощью MAKEPOINTS или GET_X_LPARAM / GET_Y_LPARAM.

Но как мне упаковать x и y, в основном выполняя действия, обратные макросам выше.

Мои предположения:

DWORD packed = y << 8 + x;

Спасибо

Ответы [ 2 ]

5 голосов
/ 13 декабря 2011

Макрос, который вы ищете: MAKELPARAM:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms632661(v=vs.85).aspx

LPARAM WINAPI MAKELPARAM(
    WORD wLow,
    WORD wHigh
);

Я полагаю, что это эквивалентно MAKELONG (то же самое, но возвращает DWORD), но опять же ... может быть, есть платформа, где LPARAM и DWORD определяются по-разному. : - /


РЕДАКТИРОВАТЬ : Очевидно, что LPARAM (и WPARAM!) В настоящее время оба определены под капотом, чтобы быть размером указателей на вашей платформе. «L» (длинный) и «W» (слово) являются историческими: Каковы определения для LPARAM и WPARAM?

2 голосов
/ 13 декабря 2011

Используйте предоставленный Microsoft макрос :

MAKELPARAM(x, y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...