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