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

标签 c++ windows visual-studio-2010 visual-studio-2008 winapi

一个标准的窗口过程函数采用这个原型(prototype):

LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

当消息如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);
};

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/

相关文章:

visual-studio-2010 - 如何让 IntelliSense 在 Razor 助手的脚本标记内工作?

c# - 如何在 Visual Studio 2010 中使用 try/catch 包围代码块

c++ - 使用它的结构指针访问函数内的结构

c++ - 如何正确分解代码?

c++ - 如何在 ceres 中为同一解决方案创建不同的求解器 block ?

c++ - 结构化绑定(bind)是否适用于 std::vector?

在windows上编译pyd文件但是 "This program cannot be run in DOS mode."

windows - 在 Windows 上是否有可以与 C 和 Perl 一起使用的**轻量级** IDE?

C - 存储数组

vb.net - Visual Basic 命令行编译器已停止工作