Microsoft & .NETVisual C#Dynamic Dialog Class

Dynamic Dialog Class

Developer.com content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.


These classes were developed as base classes for use in a script parser, where users can build there own dialogs, using a VB-script alike language. So basically there can be any number of controls on the dialog, at any place on the dialog.

Global structure of the

CDynDialogEx
class:

  • class is derived of
    CDialog
  • in the class there is an array of
    CDynDialogItemEx
    pointers, the dialog controls
  • class includes
    DoDataExchange()
    function.
  • add controls to dialog through function
    AddDlgControl()

Global structure of the

CDynDialogItemEx
class:

  • holds the data of the control that was added to the dialog, like the caption, the rectangle, etc.
  • creates the controls on the dialog

Small piece of sample code on how to use the classes

void CTestDynDialogDlg::OnButton1();
{
 int nRadio1 = 0;
 
 <font color=#008000>//Create a rectangle in dialog units, where </font>
 <font color=#008000>//the control should be placed</font>
 CRect rect(10,5,60,19);

 <font color=#008000>//create the dynamic dialog, </font>
 <font color=#008000>//using this as parent window</font>
 CDynDialogEx dlg(this);		

 dlg.SetWindowTitle(_T("Dynamic Dialog : WindowTitle....."));

 <font color=#008000>//Add a button control at the given position</font>
 dlg.AddDlgControl(_T("BUTTON"), <font color=#008000>// Type of control OR control classname</font>
                   _T("Press me!"), <font color=#008000>// Caption of control</font>
                   STYLE_BUTTON,    <font color=#008000>// dwStyle of control</font>
                   EXSTYLE_BUTTON,  <font color=#008000>// dwStyleEx of control</font>
                   &rect,           <font color=#008000>// Position of control on dlg in dlg units</font>
                   NULL,            <font color=#008000>// void ptr to DDX var - default=NULL</font>
                   IDC_DYN_BUTTON); <font color=#008000>// control ID - default=zero</font>

 <font color=#008000>//Add a group of radio buttons</font>
 <font color=#008000>//variable nRadio1 is used for DDX</font>
 dlg.AddDlgControl(_T("BUTTON"), 
                   _T("Radio1Caption 1"), 
                   STYLE_RADIO_GROUP, 
                   EXSTYLE_RADIO, 
                   NULL, 
                   (void*)&nRadio1);

 dlg.AddDlgControl(_T("BUTTON"), 
                   _T("Radio1Caption 2"), 
                   STYLE_RADIO, 
                   EXSTYLE_RADIO);

 <font color=#008000>//Now show me the dialog</font>
 dlg.DoModal()
}

Working explained


  • CDynDialogEx::AddDlgControl()
    function creates new object of class

    CDynDialogItemEx
    and adds it to the array of controls. Function also checks/sets the size of the dialog, so the control is seen on the dialog.

  • CDynDialogEx::DoModal()
    function initializes the

    DLGTEMPLATE
    structure using the selected font and calls

    CDialog::InitModalIndirect()

  • CDynDialogEx::OnInitDialog()
    function creates all the controls on the dialog

  • CDynDialogItemEx::CreateEx()
    function converts from dialog units to screen units and creates the control

Possible extensions:

  • adding ActiveX controls dynamically to the dialog
  • adding Menus dynamically to the dialog

Downloads

Download demo project – 30 Kb

Download source – 8 Kb

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Latest Posts

Related Stories