c – 传递额外的wParam / lParam参数?

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

LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WParaM wParam, LParaM lParam);

当诸如WM_MOUSEMOVE或WM_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);
};

在初始化并由Initialize()创建hWnd之后,它会将诸如WM_LBUTTONDOWN之类的消息发送到RandomProc.一旦收到消息,我希望RandomProc使用Draw()重绘Random类的窗口.

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

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

解决方法:

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

函数为窗口句柄分配/检索任意指针.您可以将Random类实例的指针分配给您创建的每个窗口.在RandomProc中,您只需使用getwindowlongPtr并将指针强制转换为Random *.

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

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...