4

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

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

当消息如WM_MOUSEMOVEorWM_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_LBUTTONDOWNto等消息RandomProc。一旦收到消息,我想RandomProc用它Draw ()来重绘类的窗口Random

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

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

4

1 回答 1

8

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

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

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

于 2012-05-26T13:01:40.637 回答