2011-10-04 65 views
1

我们可以使用这个作为最后一个参数与CreateWindow并获得一个指向WndProc中的应用对象是这样的:获取应用对象的指针

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

什么是最好的方式在Dialog Message Proc中访问这个指针?是制作全局指针的解决方案吗?

回答

2

你得到额外的初始化数据与WM_INITDIALOG,看到WM_INITDIALOG message

lParam的

额外的初始化数据。该数据传递到系统 作为lParam参数在调用CreateDialogIndirectParamCreateDialogParamDialogBoxIndirectParam,或用于创建对话框DialogBoxParam功能 。对于属性表,该参数是 指向用于创建页面的PROPSHEETPAGE结构的指针。如果使用其他对话框创建功能,则此 参数为零。

也就是说,你可以通过lParamCreateDialogParam参数,并在对话框PROC将WM_INITDIALOG消息接收它。

+0

这看起来可能是我需要的。如果我从我的WndProc调用它,我传递WM_CREATE的lParam并以相同的方式获取指针。但是如果我从WndProc外部调用它会怎么样。换句话说,我如何直接从MyClass *转换为LPARAM? – user974967

+0

MyClass * pMyClass = ...; CreateDialogParam(...,pMyClass,...); - 这是你需要的吗?在DialogProc中,你将'lParam'返回到'MyClass *'。 –

+0

好的。我不确定是否需要reinterpert_cast <>将MyClass *转换为LPARAM并将其转换回来。谢谢。 – user974967