传递额外的wParam/lParam参数?

GIL*_*ESH 4 c++ windows winapi visual-studio-2010 visual-studio-2008

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

LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
Run Code Online (Sandbox Code Playgroud)

当一个消息如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);
};
Run Code Online (Sandbox Code Playgroud)

在之后hWnd进行初始化,并通过创建Initialize (),它会发送消息,如WM_LBUTTONDOWNRandomProc.一旦接收到消息,我想RandomProcDraw ()重画类的窗口Random.

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

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

Vik*_*pov 7

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

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

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

  • 有用的是`GWLP_USERDATA`来放入你自己的数据来区分. (2认同)