ParamDlg* SampleShaderPlugin::CreateParamDlg(HWND hwMtlEdit, IMtlParams *imp) { IAutoMParamDlg* masterDlg = SampleShaderPluginDesc.CreateParamDlgs(hwMtlEdit, imp, this); uvGenDlg = uvGen->CreateParamDlg(hwMtlEdit, imp); masterDlg->AddDlg(uvGenDlg); //TODO: Set the user dialog proc of the param block, and do other initialization return masterDlg; }
ParamDlg* Gradient::CreateParamDlg(HWND hwMtlEdit, IMtlParams *imp) { // JBW: the main difference here is the automatic creation of a ParamDlg by the new // ClassDesc2 function CreateParamDlgs(). This mirrors the way BeginEditParams() // can be redirected to the ClassDesc2 for automatic ParamMap2 management. In this // case a special subclass of ParamDlg, AutoMParamDlg, defined in IParamm2.h, is // created. It can act as a 'master' ParamDlg to which you can add any number of // secondary dialogs and it will make sure all the secondary dialogs are kept // up-to-date and deleted as necessary. // Here you see we create the Coordinate, Gradient and Output ParamDlgs in the desired // order, and then add the Coordinate and Output dlgs as secondaries to the // Gradient master AutoMParamDlg so it will keep them up-to-date automatically // create the rollout dialogs uvGenDlg = uvGen->CreateParamDlg(hwMtlEdit, imp); IAutoMParamDlg* masterDlg = gradCD.CreateParamDlgs(hwMtlEdit, imp, this); texoutDlg = texout->CreateParamDlg(hwMtlEdit, imp); // add the secondary dialogs to the master masterDlg->AddDlg(uvGenDlg); masterDlg->AddDlg(texoutDlg); EnableStuff(); return masterDlg; }