传递额外的 wParam/lParam 参数

Pass extra wParam/lParam parameters?

本文关键字:lParam 参数 wParam      更新时间:2023-10-16

标准窗口过程函数采用以下原型:

LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

当消息(如 WM_MOUSEMOVEWM_CHAR )时,WndProc 函数将接收消息源自的窗口,以及任何额外的参数,这些参数将与 msg 和 wParam/lParam 一起使用。

我现在有的是一个班级。说

class Random
{
    public:
        void Initialize ();
    private:
        void Draw ();
        HWND hWnd;
    friend LRESULT CALLBACK RandomProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
};

hWnd初始化创建后Initialize (),会向RandomProc发送WM_LBUTTONDOWN等消息。收到消息后,我想RandomProc使用Draw ()重绘类Random的窗口。

问题是,我将有多个Random变量,每个变量都有一个窗口。所有的窗口都会将它们的消息发送到RandomProc,并希望它重绘hWnd的相应窗口。我不知道哪个随机变量根据 hWnd 参数或 msg/wParam/lParam 发送消息,因此无法访问适当的Draw ()函数,也无法重绘正确的窗口。

有没有办法在每次发送消息时将指向窗口类的指针传递给过程,或者是否有另一种方法可以访问其 hWnd 发送消息的随机类?

你不是在寻找GetWindowLongPtr/SetWindowLongPtr函数吗?

此函数分配/检索指向/从窗口句柄的任意指针。可以将指向随机类实例的指针分配给您创建的每个窗口。在RandomProc中,您只需使用GetWindowLongPtr并将指针投射到Random*

正如 Chris 在评论中所说,使用 GWLP_USERDATA 属性来分配指针。