dcsimg
August 17, 2018
Hot Topics:

Dynamic Dialog Class

  • February 9, 2000
  • 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






Comment and Contribute

 


(Maximum characters: 1200). You have characters left.

 

 


Enterprise Development Update

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

By submitting your information, you agree that developer.com may send you developer offers via email, phone and text message, as well as email offers about other products and services that developer believes may be of interest to you. developer will process your information in accordance with the Quinstreet Privacy Policy.

Sitemap

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