65.9K
CodeProject is changing. Read more.
Home

Simple ActiveX control interface support via CAxWindow

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.20/5 (13 votes)

Jan 4, 2003

viewsIcon

59790

HOWTO support AX control interface via CAxWindow

Introduction

Code below describes only idea using CComQIPtr template in pair with CAxWindow.
class CAxOwnControl : 
public CWindowImpl< CAxOwnControl , CAxWindow >,
public CComQIPtr< IControl, &IID_IControl >
{
public:
DECLARE_WND_SUPERCLASS("AxOwnControl", CAxWindow::GetWndClassName());
CAxOwnControl(){}
virtual ~CAxOwnControl(){}

HWND Create(HWND hWndParent, RECT& rcPos, 
        DWORD dwStyle = 0, DWORD dwExStyle = 0, 
        UINT nID = 0, LPVOID lpCreateParam = NULL)
{
	AtlAxWinInit(); // initialize AxHost stuff
	LPOLESTR pstrCLSID_CAxOwnControl = NULL;
	StringFromCLSID( CLSID_Control, &pstrCLSID_CAxOwnControl );
	ATLASSERT( pstrCLSID_CAxOwnControl != NULL );
	if( !pstrCLSID_CAxOwnControl )
		return NULL;

	USES_CONVERSION;
	HWND hWnd = CWindowImpl<CAxOwnControl , 
                     CAxWindow>::Create(hWndParent, rcPos, 
                     OLE2T(pstrCLSID_CAxOwnControl ), 
                     dwStyle, dwExStyle, nID, lpCreateParam);
	CoTaskMemFree(pstrCLSID_CAxOwnControl);

	if( hWnd ){
		IControlPtr pControl = NULL;
		QueryControl( IID_IControl, (void**)&pControl );
		*((CComQIPtr< IControl, &IID_IControl >*)this) = pControl;
	}

	return hWnd;
}

BEGIN_MSG_MAP_EX(CAxOwnControl)
END_MSG_MAP()
};

HOWTO use:
    CAxOwnControl m_ctrl;
    m_ctrl.Create(...);
    m_ctrl->SomeControlMethod();