Can you make a OLE Control an OLE Control container?
MikeMike -- MikeMike@athens.emi.net Tuesday, March 26, 1996 [Moderator's note: In this episode, Mike answers his own question before it even gets to the list...] Opps...It turns out the answer to this one is quite obvious (sorry it wasn't to me initially so maybe this will help someone else out). After resolving this I wonder why Microsoft doesn't make OLE Control Containment an option when creating OLE Controls in OLEControlWizard? Anyway, I awoke this morning and the first thing I thought of was that OleControlWizard does NOT give you the option of making your OLE Control a OLE Control Container. I wondered if OLE controls are by their nature OLE Control containers. Apparently not! Therefore in my COleControlModule::InitInstance I put AfxEnableControlContainer() It works...My OLE Control now allows me to have make OLE control childs. I hope this is helpful to someone. ---------- From: MikeMike[SMTP:MikeMike] Sent: Sunday, March 26, 1995 4:26 AM To: 'mfc-l@netcom.com' Subject: Can you make a OLE Control an OLE Control container? Importance: High VC4.1 Win95 Hello The quick question is "Can you make a OLE Control an OLE Control container?" The long drawn out reason and problem I am having is as follows: I am getting an ASSERT(ContinueModal()) in Wincore.cpp on Line# 3525 BECAUSE I have an OLE Control that creates a DoModal PropertySheet that contains in itself contains an OLE Control...as follows CMyOleControl::OnWhatever() { CMyPropertySheet mPS; mPS.DoModal(); } the ASSERT(ContinueModal()) I get is in Wincore.cpp on Line #3525 // A quick snippet of Wincore.cpp where the assert happens int CWnd::RunModalLoop(DWORD dwFlags) { ASSERT(::IsWindow(m_hWnd)); // window must be created ASSERT(!(m_nFlags & WF_MODALLOOP)); // window must not already be in modal state // for tracking the idle time state BOOL bIdle = TRUE; LONG lIdleCount = 0; BOOL bShowIdle = (dwFlags & MLF_SHOWONIDLE) && !(GetStyle() & WS_VISIBLE); HWND hWndParent = ::GetParent(m_hWnd); m_nFlags |= (WF_MODALLOOP|WF_CONTINUEMODAL); MSG* pMsg = &AfxGetThread()->m_msgCur; // acquire and dispatch messages until the modal state is done for (;;) { ASSERT(ContinueModal()); <<<--- This is the Line I get the Assert on etc etc etc The obvious "assumption" is that an OLE control can not be embedded in a property page if the property page is NOT a window descendant of a OLE Control CONTAINER. (Oh and by the way yes the OLE Control is actually a child of a OLE Control container.) Why? Because if I take this same CMyPropertySheet and call it from a non-Ole Control...everything works fine/ So what was the original the question you ask? Can you make a OLE Control an OLE Control container? Thanx and Your assistance is appreciated MIKEMIKE@EMI.NET 407-626-2330
Mark Kramer -- markkra@microsoft.com Friday, March 29, 1996 The code for containment was added to the CWnd class. This means that any window is a candidate for housing an OLE Control. >From the desk of ... Mark Kramer (These opinions do not represent Microsoft Corporation) >---------- >From: MikeMike[SMTP:MikeMike@athens.emi.net] >Sent: Tuesday, March 26, 1996 9:58 AM >To: 'mfc-l@netcom.com' >Subject: RE: Can you make a OLE Control an OLE Control container? > >[Moderator's note: In this episode, Mike answers his own question >before it even gets to the list...] > >Opps...It turns out the answer to this one is quite obvious (sorry it >wasn't to me initially so maybe this will help someone else out). > >After resolving this I wonder why Microsoft doesn't make OLE Control >Containment an option when creating OLE Controls in OLEControlWizard? > >Anyway, I awoke this morning and the first thing I thought of was that >OleControlWizard does NOT give you the option of making your OLE >Control a >OLE Control Container. I wondered if OLE controls are by their nature >OLE >Control containers. Apparently not! > >Therefore in my >COleControlModule::InitInstance >I put >AfxEnableControlContainer() > >It works...My OLE Control now allows me to have make OLE control >childs. > >I hope this is helpful to someone. > >---------- >From: MikeMike[SMTP:MikeMike] >Sent: Sunday, March 26, 1995 4:26 AM >To: 'mfc-l@netcom.com' >Subject: Can you make a OLE Control an OLE Control container? >Importance: High > >VC4.1 Win95 > >Hello > >The quick question is "Can you make a OLE Control an OLE Control >container?" > >The long drawn out reason and problem I am having is as follows: > >I am getting an ASSERT(ContinueModal()) in Wincore.cpp on Line# 3525 > >BECAUSE I have an OLE Control that creates a DoModal PropertySheet that > >contains in itself contains an OLE Control...as follows > >CMyOleControl::OnWhatever() >{ >CMyPropertySheet mPS; > mPS.DoModal(); >} > >the ASSERT(ContinueModal()) I get is in Wincore.cpp on Line #3525 > >// A quick snippet of Wincore.cpp where the assert happens > >int CWnd::RunModalLoop(DWORD dwFlags) >{ > ASSERT(::IsWindow(m_hWnd)); // window must be created > ASSERT(!(m_nFlags & WF_MODALLOOP)); // window must not already be in >modal >state > > // for tracking the idle time state > BOOL bIdle = TRUE; > LONG lIdleCount = 0; > BOOL bShowIdle = (dwFlags & MLF_SHOWONIDLE) && !(GetStyle() & >WS_VISIBLE); > HWND hWndParent = ::GetParent(m_hWnd); > m_nFlags |= (WF_MODALLOOP|WF_CONTINUEMODAL); > MSG* pMsg = &AfxGetThread()->m_msgCur; > > // acquire and dispatch messages until the modal state is done > for (;;) > { > ASSERT(ContinueModal()); <<<--- This is the Line I get the Assert on > etc >etc >etc > >The obvious "assumption" is that an OLE control can not be embedded in >a >property page if the property page is NOT a window descendant of a OLE >Control CONTAINER. (Oh and by the way yes the OLE Control is actually >a >child of a OLE Control container.) > >Why? Because if I take this same CMyPropertySheet and call it from a >non-Ole Control...everything works fine/ > >So what was the original the question you ask? Can you make a OLE >Control >an OLE Control container? > >Thanx and Your assistance is appreciated >MIKEMIKE@EMI.NET >407-626-2330 > > > > >
| Вернуться в корень Архива |