[Last Call] Learn about multicloud storage options and how to improve your company's cloud strategy. Register Now

x
?
Solved

How can I create dialog with ActiveX control in MFC supported console application?

Posted on 2001-07-03
8
Medium Priority
?
1,666 Views
Last Modified: 2013-11-20
Hi,
I writing a console application with MFC support.
I've craeted "CMyDialog : public CDialog" class.
this dialog has an ActiveX control.

When I'm calling CMyDialog.Create(IDD_MYDIALOG) the function failed, and I'm getting the following warning:

First-chance exception in MyApplication.exe (OLE32.DLL): 0xC0000005: Access Violation.
First-chance exception in MyApplication.exe (KERNEL32.DLL): 0x8001010D: (no name).
Warning: CreateDlgControls failed during dialog init.

Can someone help me?

How can I create this dialog sucessfully?

Thanks,
Michael
0
Comment
Question by:bachar
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
8 Comments
 
LVL 4

Expert Comment

by:inpras
ID: 6248951
How did you create your application? Can please explain in more detail what exactly you mean console application with MFC Support?
0
 

Author Comment

by:bachar
ID: 6249003
O.k.

I've created it with Microsoft Visual Stodio 6.
I've created a new console application with the MSDEV wizard, one of the options is: Console Application with MFC support.

actually it adds several MFC header files to the Win32 Console application.
0
 
LVL 49

Expert Comment

by:DanRollins
ID: 6250309
I was able to bring up a dialog box with a webbrowser ActiveX by adding this at the bottom of _tmain

   afxContextIsDLL= FALSE;  // else AfxOleInit fails
   BOOL fRet= AfxOleInit();
   AfxEnableControlContainer();

   CMyDialog dlg;
   theApp.m_pMainWnd= &dlg;
   dlg.DoModal();

I can't find any documentation on afxContextIsDLL or why it has been set to TRUE, but AfxOleInit() must be called and the code in there will short-curcuit if afxContextIsDLL is TRUE.

-- Dan
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 2

Expert Comment

by:GloriousRain
ID: 6251219
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. See below article:
<MSDN>
HOWTO: Use a Dialog Template to Create a MFC Dialog with an ActiveX Control

Q231591


--------------------------------------------------------------------------------
The information in this article applies to:

The Microsoft Foundation Classes (MFC), included with:
Microsoft Visual C++, 32-bit Editions, versions 4.2, 5.0, 6.0

--------------------------------------------------------------------------------


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.



MORE INFORMATION
The following source shows how to load a DIALOG resource from memory and display it indirectly using a dialog template in memory. This function also uses the DLGINIT resource and will work with DIALOG resources that contain ActiveX controls.



void CMainFrame::OnMyModalDialogIndirect()
{
     //Load DLGTEMPLATE
     DLGTEMPLATE* pTemplate;
 
     HINSTANCE hInst= AfxFindResourceHandle(
                            MAKEINTRESOURCE(IDD_INDIRECT),RT_DIALOG);
     
     if (hInst == NULL)
     {
          TRACE("Cound not find resource in resource chain");
          ASSERT(FALSE);
          return;
     }
 
     HRSRC hRsrc = ::FindResource(hInst, MAKEINTRESOURCE(IDD_INDIRECT),
          RT_DIALOG);
     ASSERT(hRsrc != NULL);

     HGLOBAL hTemplate = ::LoadResource(hInst, hRsrc);
     ASSERT(hTemplate != NULL);
 
     pTemplate = (DLGTEMPLATE*)::LockResource(hTemplate);

     //Load coresponding DLGINIT resource
     void* lpDlgInit;
     HGLOBAL hDlgInit = NULL;

     HRSRC hsDlgInit = ::FindResource(hInst, MAKEINTRESOURCE(IDD_INDIRECT),
                             RT_DLGINIT);
     if (hsDlgInit != NULL)
     {
          // load it
          hDlgInit = ::LoadResource(hInst, hsDlgInit);
          ASSERT(hDlgInit != NULL);

          // lock it
          lpDlgInit = ::LockResource(hDlgInit);
          ASSERT(lpDlgInit != NULL);
     }

     //ToDo: Modify DLGTEMPLATE in memory if desired

     CDialog dlg;
     dlg.InitModalIndirect(pTemplate, NULL, lpDlgInit);  
     dlg.DoModal();    
 
     ::UnlockResource(hTemplate);
     ::FreeResource(hTemplate);
     if (hDlgInit)
     {
          ::UnlockResource(hDlgInit);  
          ::FreeResource(hDlgInit);
     }    
}
<MSDN>
0
 
LVL 49

Expert Comment

by:DanRollins
ID: 6744225
hi bachar,
Do you have any additional questions?  Do any comments need clarification?

-- Dan
0
 
LVL 49

Accepted Solution

by:
DanRollins earned 1200 total points
ID: 6762849
hi bachar,
Do you have any additional questions?  Do any comments need clarification?

-- Dan
0
 
LVL 5

Expert Comment

by:Netminder
ID: 6805970
bachar,

These questions are still open and our records show you logged in recently. Please resolve them appropriately as soon as possible. Continued disregard of your open questions will result in the force/acceptance of a comment as an answer; other actions affecting your account may also be taken. I will revisit these questions in approximately seven (7) days. Please note that the recommended minimum for an "Easy" question is 50 points.
http://experts-exchange.com/jsp/qShow.jsp?ta=progsoftgen&qid=20186509
http://experts-exchange.com/jsp/qShow.jsp?ta=progsoftgen&qid=20100277
http://experts-exchange.com/jsp/qShow.jsp?ta=progsoftgen&qid=20005648
http://experts-exchange.com/jsp/qShow.jsp?ta=progsoftgen&qid=11452298
http://experts-exchange.com/jsp/qShow.jsp?ta=progsoftgen&qid=11404058
http://experts-exchange.com/jsp/qShow.jsp?ta=cplusprog&qid=20141685
http://experts-exchange.com/jsp/qShow.jsp?ta=cplusprog&qid=20093290
http://experts-exchange.com/jsp/qShow.jsp?ta=mfc&qid=20145151
http://experts-exchange.com/jsp/qShow.jsp?ta=mfc&qid=20116236
http://experts-exchange.com/jsp/qShow.jsp?ta=mfc&qid=20094685
http://experts-exchange.com/jsp/qShow.jsp?ta=networkgen&qid=20032846

EXPERTS: Please leave your thoughts on this question here.

Thanks,

Netminder
Community Support Moderator
Experts Exchange
0
 
LVL 5

Expert Comment

by:Netminder
ID: 6826216
Admin notified of user neglect. Force/accepted by

Netminder
Community Support Moderator
Experts Exchange
0

Featured Post

Survive A High-Traffic Event with Percona

Your application or website rely on your database to deliver information about products and services to your customers. You can’t afford to have your database lose performance, lose availability or become unresponsive – even for just a few minutes.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Load and Save to file, Document-View interaction inside the SDI. Continuing from the second article about sudoku.   Open the project in visual studio. From the class view select CSudokuDoc and double click to open the header …
Introduction: Hints for the grid button.  Nested classes, templated collections.  Squash that darned bug! Continuing from the sixth article about sudoku.   Open the project in visual studio. First we will finish with the SUD_SETVALUE messa…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…

656 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question