发送 lparam 作为指向类的指针,并在 WndProc() 中使用它

dus*_*usm 5 c++ winapi wndproc

我有这个抽象代码:我想在 CreateWindowEx() 中使用 lParam(最后一个参数)来保存指向在 main - SaveArr 开头声明的类的指针。然后,我想在函数 WndProc 中使用它。一开始我做了一个全局数组,然后我可以在任何地方使用它,但就 C++ 而言它不是那么“聪明”,所以我试图升级它。

class Samples
{
        int arr[ITERATIONS+1];
        int index;
        ...
}

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nCmdShow)
{
        Samples * SaveArr;
        ...
    hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
                          ClsName,
                          WindowCaption,
                          WS_OVERLAPPEDWINDOW,
                          INITIAL_WIN_LOCAT_X,
                          INITIAL_WIN_LOCAT_Y,
                          WIN_WIDTH,
                          WIN_HIGHT,
                          NULL,
                          NULL,
                          hInstance,
                          NULL);    //here i want to pass SaveArr, so that i can use it in the WndProc(...) function

...
return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
   ...      //here i would like to use lParam as the class pointer, meaning using the 
              SaveArr declared in the main function.

}

}
Run Code Online (Sandbox Code Playgroud)

lit*_*adv 1

来自参考

lpParam [输入,可选]

Type: LPVOID

Pointer to a value to be passed to the window through the
Run Code Online (Sandbox Code Playgroud)

WM_CREATE消息的lParam参数指向的CREATESTRUCT结构(lpCreateParams成员)。该消息在返回之前由该函数发送到创建的窗口。

If an application calls CreateWindow to create a MDI client
Run Code Online (Sandbox Code Playgroud)

窗口中,lpParam 应该指向 CLIENTCREATESTRUCT 结构。如果MDI客户窗口调用CreateWindow来创建MDI子窗口,lpParam应该指向MDICREATESTRUCT结构。如果不需要附加数据,lpParam 可以为 NULL。

您期望 lParam 始终传递到 WndProc,但它仅与 WM_CREATE 一起传递。

请注意,即使如此,它也不是直接传递的,而是通过一个结构传递的,该结构是 WM_CREATE 的实际 lParam。