WM_MOUSEMOVE - 打包 x 和 y 位置

Posted

技术标签:

【中文标题】WM_MOUSEMOVE - 打包 x 和 y 位置【英文标题】:WM_MOUSEMOVE - packing x and y positions 【发布时间】:2011-12-13 13:57:34 【问题描述】:

我正在使用一个粗略的系统通过将 WM_MOUSEMOVE 事件直接发送到 Flash 窗口来控制来自 C++/win32 程序的 Flash 电影。

它适用于一个轴:

SendMessage( m_targetWindowHWND, WM_MOUSEMOVE, 0, xpos);

但是,我现在想同时发送 x 和 y 值。我知道这些被打包到 WM_MOUSEMOVEs lparam 中。在 C++ 中,这可以用 MAKEPOINTS 或 GET_X_LPARAM/GET_Y_LPARAM 解包。

但是我怎么把x和y打包,基本上和上面的宏做相反的操作。

我的猜测:

DWORD packed = y << 8 + x;

谢谢

【问题讨论】:

它们是 16 位字,移位 16。 【参考方案1】:

您要查找的宏是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”(字)是历史的:What are the definitions for LPARAM and WPARAM?

【讨论】:

【参考方案2】:

使用Microsoft provided macro:

MAKELPARAM(x, y)

【讨论】:

谢谢。我知道它必须简单!

以上是关于WM_MOUSEMOVE - 打包 x 和 y 位置的主要内容,如果未能解决你的问题,请参考以下文章

位运算总结

位运算技巧

位运算笔记

交换两数的值(利用位运算)

交换两数的值(利用位运算)

交换两数的值(利用位运算)