MAP in ATL

来源:互联网 发布:python 编写图形界面 编辑:程序博客网 时间:2024/05/20 23:06

//   =============================== QueryInterface ==============================

class ATL_NO_VTABLE CA :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CA, &CLSID_HHAidWindow>,
public CWindowImpl<CA>,
public IDispatchImpl<IA, &IID_IA, &LIBID_ALib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{


//

BEGIN_COM_MAP(CA)
COM_INTERFACE_ENTRY(IA)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()


//  =============================== 响应windows消息 ==============================

class ATL_NO_VTABLE CA :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CA, &CLSID_HHAidWindow>,
public CWindowImpl<CA>,
public IDispatchImpl<IHHAidWindow, &IID_IHHAidWindow, &LIBID_COMDualBoardPluginLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{


//

BEGIN_MSG_MAP(CA)

MESSAGE_HANDLER(WM_SIZE, OnSize)
MESSAGE_HANDLER(WM_CLOSE, OnClose)
MESSAGE_HANDLER(WM_CREATE, OnCreate)

END_MSG_MAP()




///  ==============================事件响应 =====================================

class ATL_NO_VTABLE CA:
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CCOMDualBoardManager, &CLSID_COMDualBoardManager>,
public IDispEventSimpleImpl<0, CA, &__uuidof(_IEvents)>,

//
BEGIN_SINK_MAP( CA )
SINK_ENTRY_INFO( 0, __uuidof(_IA), 3, OnChange, &OnChange)
END_SINK_MAP()


///  ==============================属性 =====================================

class ATL_NO_VTABLE CATLCA:
public CComObjectRootEx<CComSingleThreadModel>,
public CStockPropImpl<CATLCA, IATLCanvasWindow>,
public IPersistStreamInitImpl<CATLCA>,
public IOleControlImpl<CATLCA>,
public IOleObjectImpl<CATLCA>,
public IOleInPlaceActiveObjectImpl<CATLCA>,
public IViewObjectExImpl<CATLCA>,
public IOleInPlaceObjectWindowlessImpl<CATLCA>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CATLCA>,
public CProxy_IATLCanvasWindowEvents<CATLCA>,
public IPersistStorageImpl<CATLCA>,
public ISpecifyPropertyPagesImpl<CATLCA>,
public IQuickActivateImpl<CATLCA>,
#ifndef _WIN32_WCE
public IDataObjectImpl<CATLCA>,
#endif
public IProvideClassInfo2Impl<&CLSID_ATLCA, &__uuidof(_IATLCAEvents), &LIBID_COMCALib>,
#ifdef _WIN32_WCE // IObjectSafety is required on Windows CE for the control to be loaded correctly
public IObjectSafetyImpl<CATLCA, INTERFACESAFE_FOR_UNTRUSTED_CALLER>,
#endif
public CComCoClass<CATLCA, &CLSID_ATLCA>,
public CComControl<CATLCA>
{


//

BEGIN_PROP_MAP(CATLCA)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
PROP_ENTRY_TYPE("Enabled", DISPID_ENABLED, CLSID_NULL, VT_BOOL)
END_PROP_MAP()


///  ==============================连接点 =====================================

class ATL_NO_VTABLE CATLCA:
public CComObjectRootEx<CComSingleThreadModel>,
public CStockPropImpl<CATLCA, IATLCanvasWindow>,
public IPersistStreamInitImpl<CATLCA>,
public IOleControlImpl<CATLCA>,
public IOleObjectImpl<CATLCA>,
public IOleInPlaceActiveObjectImpl<CATLCA>,
public IViewObjectExImpl<CATLCA>,
public IOleInPlaceObjectWindowlessImpl<CATLCA>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CATLCA>,
public CProxy_IATLCanvasWindowEvents<CATLCA>,

public IPersistStorageImpl<CATLCA>,
public ISpecifyPropertyPagesImpl<CATLCA>,
public IQuickActivateImpl<CATLCA>,
#ifndef _WIN32_WCE
public IDataObjectImpl<CATLCA>,
#endif
public IProvideClassInfo2Impl<&CLSID_ATLCA, &__uuidof(_IATLCAEvents), &LIBID_COMCALib>,
#ifdef _WIN32_WCE // IObjectSafety is required on Windows CE for the control to be loaded correctly
public IObjectSafetyImpl<CATLCA, INTERFACESAFE_FOR_UNTRUSTED_CALLER>,
#endif
public CComCoClass<CATLCA, &CLSID_ATLCA>,
public CComControl<CATLCA>
{


BEGIN_CONNECTION_POINT_MAP(CATLCA)
CONNECTION_POINT_ENTRY(__uuidof(_IATLCAEvents))
END_CONNECTION_POINT_MAP()


///  =========================_ATL_OBJMAP_ENTRY ======================

//

OBJECT_ENTRY_AUTO(__uuidof(CA), CA)

//

#define OBJECT_ENTRY_AUTO(clsid, class) \
__declspec(selectany) ATL::_ATL_OBJMAP_ENTRY __objMap_##class = {&clsid, class::UpdateRegistry, class::_ClassFactoryCreatorClass::CreateInstance, class::_CreatorClass::CreateInstance, NULL, 0, class::GetObjectDescription, class::GetCategoryMap, class::ObjectMain }; \
extern "C" __declspec(allocate("ATL$__m")) __declspec(selectany) ATL::_ATL_OBJMAP_ENTRY* const __pobjMap_##class = &__objMap_##class; \
OBJECT_ENTRY_PRAGMA(class)


原创粉丝点击