15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Wrapping MFC Classes into OCX

Alexander Gavrilov -- Alexander_Gavrilov@esicorp.com
Friday, November 15, 1996

     Environment: Win 95, NT 4.0, VC++ 4.2b
     
     
     Does anyone out there have any experience wrapping an MFC Class, for 
     example listbox into OCX. I have read "OLE Controls: Subclassing a 
     Windows Control" article on MSDN, but the only thing it shows is how 
     to subclass a Windows control. I have an MFC extension class, which is 
     derived from CWnd, that I want to put in OCX. What I need to be able 
     to do is to call member functions of the extension class. My idea was 
     to instantiate the extension class myself and assign its window to the 
     COleControl window, which is created whenever you subclass the 
     control. Is this a right way to go? Any ideas would be appreciated.



Kevin Tarn -- kevin@earth.pln.com.tw
Tuesday, November 19, 1996



>Environment: Win 95, NT 4.0, VC++ 4.2b


 >    Does anyone out there have any experience wrapping an MFC Class, for 

 >    example listbox into OCX. I have read "OLE Controls: Subclassing a
 >    Windows Control" article on MSDN, but the only thing it shows is how 

 >    to subclass a Windows control. I have an MFC extension class, which is 

 >    derived from CWnd, that I want to put in OCX. What I need to be able 

 >    to do is to call member functions of the extension class. My idea was 

 >    to instantiate the extension class myself and assign its window to the 

 >    COleControl window, which is created whenever you subclass the
 >    control. Is this a right way to go? Any ideas would be appreciated.


Two ways you can go ahead :

1.  Transfer your extension control class's drawing codes to 
COleControl::OnDraw function, and implement  necessary message functions in 
COleControl by calling your extention control class. Also, you must transfer 
your public member functions and variables in the extention class to methods 
and properties in the ole control.

If this approach is critical pain for you, you can chose the second 
approach.

2.  To encapsulate your extention control class to the new Ole Control which 
has a goody that all ole container can use it.
 int CMyOleControl::OnCreate(LPCREATESTRUCT lpCreateStruct)
 {
 if (COleControl::OnCreate(lpCreateStruct) == -1)
 return -1;
 if (!m_extCtrl.Create(this, ID_EXTENTION_CONTROL))
 return -1;

					m_extCtrl.ShowWindow(SW_SHOW);
					return 0;
				}

				void CMyOleControl::OnSize(UINT nType, int cx, int cy)
{
	COleControl::OnSize(nType, cx, cy);
	
	switch (nType)
   {
	case SIZE_MAXIMIZED:
	case SIZE_RESTORED:
		m_extCtrl.MoveWindow(0, 0, cx, cy);
		break;
	default: break;
}
}

You should empty the COleControl::OnDraw default skeleton created by 
ControlWizard.


Kevin Tarn
kevin@pln.com.tw





Peter.Walker@ubs.com
Monday, November 18, 1996

Steps to get going...

1)Embed member pointer of CWnd Derivative in CXXXCtrl Class
2)New the member in CXXXCtrl::CXXXCtrl
3)Override CXXXCtrl::OnCreate (LPCREATESTRUCT lpCreateStruct) to create specifed
window
        if (!m_pGridWnd->Create(WS_VISIBLE|WS_CHILD,EmptyRect,this,             
        IDC_GRID_CONTROL))
        {
                TRACE(_T("Could  not create grid\n"));
                return -1;
        }

4)Override CGTSGridCtrl::OnSize..
        COleControl::OnSize(nType, cx, cy);
        ASSERT_VALID(m_pGridWnd);
        m_pGridWnd->MoveWindow(0,0,cx,cy);
5)Encapsulate any methods or properties via OLE Automation
6)Provide OLE Events for your events and callbacks.

Peter Walker
(Peter Walker@ubs.com)


______________________________ Reply Separator _________________________________
Subject: PUBLIC:  Wrapping MFC Classes into OCX
Author:  owner-mfc-l (owner-mfc-l@majordomo.netcom.com) at zhux
Date:    11/15/96 10:21 PM


     Environment: Win 95, NT 4.0, VC++ 4.2b
     
     
     Does anyone out there have any experience wrapping an MFC Class, for 
     example listbox into OCX. I have read "OLE Controls: Subclassing a 
     Windows Control" article on MSDN, but the only thing it shows is how 
     to subclass a Windows control. I have an MFC extension class, which is 
     derived from CWnd, that I want to put in OCX. What I need to be able 
     to do is to call member functions of the extension class. My idea was 
     to instantiate the extension class myself and assign its window to the 
     COleControl window, which is created whenever you subclass the 
     control. Is this a right way to go? Any ideas would be appreciated.





| Вернуться в корень Архива |