【发布时间】:2012-06-01 17:42:43
【问题描述】:
一个标准的窗口过程函数采用这个原型:
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 ()初始化创建后,会向RandomProc发送WM_LBUTTONDOWN等消息。一旦收到消息,我希望RandomProc 使用Draw () 重新绘制类Random 的窗口。
问题是,我将有多个Random 变量,每个变量都有一个窗口。所有的窗口都会将它们的消息发送到RandomProc,并希望它重新绘制hWnd 的相应窗口。我不知道哪个随机变量根据 hWnd 参数和 msg/wParam/lParam 发送了消息,因此无法访问适当的 Draw () 函数,也无法重绘正确的窗口。
有没有办法在每次发送消息时将指向窗口类的指针传递给过程,或者是否有其他方法可以访问 hWnd 发送消息的 Random 类?
【问题讨论】:
-
消息是按窗口发送的。
hWnd参数中有什么?如果您希望窗口使用相同的过程,请让它们使用相同的类,或者为您使用的每个 Windows 类指定适当的过程。 -
在我的例子中,这些类有点像“按钮”。我需要声明其中的几个。它们都将具有相同的过程,因为它们都是相同类型的“按钮”,但我希望它们位于单独的类中,以便于控制和声明按钮。有没有办法做到这一点?
-
但并不是每个按钮都有相同的
HWND。这就是你通常如何区分它们的方式。Draw使用HWND有很大的问题吗? -
是的,我正在寻找一种通过
HWND告诉班级的方法。我想已经有人回答了。感谢您的帮助!
标签: c++ windows visual-studio-2010 visual-studio-2008 winapi