How can I read values from Modal Dialogs?



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 18/11/2009 at 07:40, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   10.5 
    Platform:   Windows  ;   
    Language(s) :     C++  ;

    ---------
    Hi.

    I have programmed a CommandData Plugin. Now I want the user to enter parameters using a modal dialog.

    So from the Execute() of the CommandData I call the Dialog and wait for the OK. But how can I access the values (like EDITNUMBER fields) in the modal dialog then?

    I have tried (simplified) :

      
    if (dlg.Open())   
    {   
    dlg.GetLong(ID_DLG_VALUE, variable)   
    }   
    GePrint(LongToString(variable));   
    

    In this example variable always is zero, regardless from what I put in the EDITNUMBER field DLG_VALUE. I assume this field cannot be read anymore after the dialog is closed ... but how can I access the fields then otherwise?

    Regards,
    Juergen



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 19/11/2009 at 09:23, xxxxxxxx wrote:

    Your modal dialog will be in its own class, of course, with the header looking something like:

      
    class MyModalDialog : public GeDialog   
    {   
    public:     MyModalDialog(void);     // dialog constructor   
         virtual Bool CreateLayout(void);     // create the dialog box   
         virtual Bool InitValues(void);          // initialise local variables   
         virtual Bool Command(LONG id, const BaseContainer& msg);          // deal with user interaction   
    LONG theValueWanted;                   // public variable   
    };   
    

    Then in the implementation, you would have something like this:

      
    Bool MyModalDialog::Command(LONG id, const BaseContainer &msg;)   
    {   
         switch (id)   
         {   
         case IDC_BUTTONOK:          // user clicked OK button   
              // get LONG value from control   
              GetLong(IDC_DLG_VALUE, theValueWanted);   
              Close();   
              return TRUE;   
              break;   
      
         case IDC_BUTTONCANCEL:   
              Close();   
              return FALSE;   
              break;   
         }   
    }   
    

    Back in your main class, although the dialog is closed you can get the value you want by getting the public variable you changed:

      
    LONG variable;   
    variable = dlg.theValueWanted;   
    

    Sorry about the double spacing, I can't get this editor to change that!



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/11/2009 at 00:53, xxxxxxxx wrote:

    Thanks for the reply ... this is understood. I was hoping I could work with "GeModalDialog"-class without having to overload the command-function.

    Do I have to save the values in public variables in the AskClose() rather than the dialog fields, that should work as well, shouldn't it?



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/11/2009 at 06:11, xxxxxxxx wrote:

    Yes, write the dialog values into public variables upon closing the dialog.

    cheers,
    Matthias


Log in to reply