标准窗口过程函数采用这个原型:
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);
};
hWnd
初始化并由Initialize ()
创建后,它会将WM_LBUTTONDOWN
等消息发送到RandomProc
。收到邮件后,我希望RandomProc
使用Draw ()
重新绘制班级Random
的窗口。
问题是,我将有多个Random
变量,每个变量都有一个窗口。所有窗口都会将消息发送到RandomProc
,并希望它重绘hWnd
的相应窗口。我不知道哪个随机变量基于hWnd参数发送消息,也不知道msg / wParam / lParam,因此无法访问相应的Draw ()
函数,也无法重绘正确的窗口。
有没有办法在每次发送消息时将指针传递给窗口的类,或者是否有另一种方法来访问hWnd发送消息的Random类?
答案 0 :(得分:6)
您不是在寻找GetWindowLongPtr
/ SetWindowLongPtr
功能吗?
此函数指定/检索窗口句柄的任意指针。您可以将Random类实例的指针分配给您创建的每个窗口。在RandomProc
中,您只需使用GetWindowLongPtr
并将指针投射到Random*
。
正如Chris在评论中所说,使用GWLP_USERDATA
属性来指定指针。