dcsimg
September 24, 2020
Hot Topics:

Dynamic Dialog Class

  • By Marcel Scherpenisse
  • Send Email »
  • More Articles »

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






This article was originally published on February 9, 2000

Enterprise Development Update

Don't miss an article. Subscribe to our newsletter below.


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