SUMMARY
It is possible to display a dialog from either a DIALOG
resource or from a dialog template in memory. In the latter case, the dialog
template is either constructed or loaded into memory and the dialog is created
indirectly.
Dialogs that contain ActiveX controls are more difficult
to create indirectly because they require additional information such as
license keys and the initial states of properties. MFC requires that this
additional information be provided as a DLGINIT resource. The Visual C++
resource editor creates this DLGINIT resource in the resource (.rc) file for
each dialog containing an ActiveX control.
Both
CDialog::CreateIndirect() and CDialog::InitModalIndirect() support using
DLGINIT resources with dialog templates in memory. However, the DLGINIT
parameter is not documented and by default is set to NULL. The complete
prototypes for these functions are:
BOOL CDialog::CreateIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd, void* lpDialogInit, HINSTANCE hInst);
BOOL CDialog::InitModalIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd = NULL,void* lpDialogInit = NULL);
Note Only the versions of these functions which take a LPCDLGTEMPLATE
as the first parameter support passing a DLGINIT resource. The versions which
take a HGLOBAL parameter do not support DLGINIT resources.