C++ 正在对话框消息进程中获取应用程序对象指针
我们可以将其用作CreateWindow的最后一个参数,并在WndProc中获取指向app对象的指针,如下所示: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获得其他初
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
。