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 位置的主要内容,如果未能解决你的问题,请参考以下文章