C++ 正在对话框消息进程中获取应用程序对象指针

C++ 正在对话框消息进程中获取应用程序对象指针,c++,winapi,pointers,C++,Winapi,Pointers,我们可以将其用作CreateWindow的最后一个参数,并在WndProc中获取指向app对象的指针,如下所示: if(message == WM_CREATE) { CREATESTRUCT* cs = (CREATESTRUCT*)lParam; pApp = (DemoApp*)cs->lpCreateParams; return 0; } 在对话消息过程中访问此指针的最佳方式是什么?是生成全局指针的解决方案吗?您可以通过WM_INITDIALOG获得其他初

我们可以将其用作CreateWindow的最后一个参数,并在WndProc中获取指向app对象的指针,如下所示:

if(message == WM_CREATE)
{
    CREATESTRUCT* cs = (CREATESTRUCT*)lParam;
    pApp = (DemoApp*)cs->lpCreateParams;
    return 0;
}

在对话消息过程中访问此指针的最佳方式是什么?是生成全局指针的解决方案吗?

您可以通过
WM_INITDIALOG
获得其他初始化数据,请参阅:

lParam

其他初始化数据。该数据被传递到系统 作为调用
CreateDialogIndirectParam
中的lParam参数,
CreateDialogParam
DialogBoxIndirectParam
,或
DialogBoxParam
函数 用于创建对话框。对于属性页,此参数为 指向用于创建页面的
PROPSHEETPAGE
结构的指针。这 如果使用任何其他对话框创建函数,则参数为零


也就是说,您可以通过
CreateDialogParam
lParam
作为参数传递,dialog进程将通过
WM_INITDIALOG
消息接收它。

这看起来可能是我需要的。如果我从WndProc调用它,我将传递WM_CREATE的lParam,并以相同的方式获取指针。但是如果我在WndProc之外叫它呢。换句话说,我如何直接从MyClass*转换为LPRAM。。。;CreateDialogParam(…,pMyClass,…);-这是你需要的吗?在DialogProc中,您可以将
lParam
转换回
MyClass*
。好的。我不确定是否需要reinterpert_cast将MyClass*转换为LPRAM并返回。谢谢。
lParam
是指针兼容类型,因此您可以并且需要重新解释并来回转换指针。从类内部看,它是
this
,而从外部看,它只是一个类指针
pMyClass