Dynamic Dialog Class


Environment: Windows 2000 RC2, Windows NT4 SP6, Visual C++ 6 SP3

Dynamic Dialog class

These classes are being used for displaying a modal dialog, on which the controls are dynamically added, without the need of having a dialog template as resource. 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;
 //Create a rectangle in dialog units, where 
 //the control should be placed
 CRect rect(10,5,60,19);

 //create the dynamic dialog, 
 //using this as parent window
 CDynDialogEx dlg(this);		

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

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

 //Add a group of radio buttons
 //variable nRadio1 is used for DDX
                   _T("Radio1Caption 1"), 

                   _T("Radio1Caption 2"), 

 //Now show me the dialog

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
  • ...


Download demo project - 30 Kb
Download source - 8 Kb


  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • As all sorts of data becomes available for storage, analysis and retrieval - so called 'Big Data' - there are potentially huge benefits, but equally huge challenges...
  • The agile organization needs knowledge to act on, quickly and effectively. Though many organizations are clamouring for "Big Data", not nearly as many know what to do with it...
  • Cloud-based integration solutions can be confusing. Adding to the confusion are the multiple ways IT departments can deliver such integration...

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date