一个标准的窗口过程函数采用这个原型(prototype):
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 类?
最佳答案
您不是在寻找 GetWindowLongPtr
吗?/SetWindowLongPtr
函数?
此函数分配/检索指向/来自窗口句柄的任意指针。您可以将指向 Random 类实例的指针分配给您创建的每个窗口。在 RandomProc
中,您只需使用 GetWindowLongPtr
并将指针转换为 Random*
。
正如 Chris 在评论中所说,使用 GWLP_USERDATA
属性来分配指针。
关于c++ - 传递额外的 wParam/lParam 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10766305/