传递额外的wParam / lParam参数?

时间:2012-05-26 12:42:27

标签: c++ windows visual-studio-2010 visual-studio-2008 winapi

标准窗口过程函数采用这个原型:

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 ()创建后,它会将WM_LBUTTONDOWN等消息发送到RandomProc。收到邮件后,我希望RandomProc使用Draw ()重新绘制班级Random的窗口。

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

有没有办法在每次发送消息时将指针传递给窗口的类,或者是否有另一种方法来访问hWnd发送消息的Random类?

1 个答案:

答案 0 :(得分:6)

您不是在寻找GetWindowLongPtr / SetWindowLongPtr功能吗?

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

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