【问题标题】:WM_MOUSEMOVE - packing x and y positionsWM_MOUSEMOVE - 打包 x 和 y 位置
【发布时间】: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。

标签: c++ winapi visual-c++


【解决方案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)
    

    【讨论】:

    • 谢谢。我知道它必须简单!
    猜你喜欢
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多