windows NT 服务如何创建activex控件?

解决方案 »

  1.   

    source code:class CMyOcx : public CWnd
    {
    protected:
    DECLARE_DYNCREATE(CMyOcx)
    public:
    CLSID const& GetClsid()
    {
    static CLSID const clsid
    = { ...... } };
    return clsid;
    }
    virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
    const RECT& rect, CWnd* pParentWnd, UINT nID, 
    CCreateContext* pContext = NULL)

    return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); 
    } BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, 
    UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE,
    BSTR bstrLicKey = NULL)

    return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
    pPersist, bStorage, bstrLicKey); 
    }
    .............
    .............
    .............
    AfxEnableControlContainer();
    RECT rect = { 0, 0, 0, 0 };
    CString str = AfxRegisterWndClass(NULL);
    CreateEx(0,str, NULL,0,rect,NULL,0);
    SetParent(NULL); CMyOcx pMyCtrl = new CMyOcx();
    pMyCtrl->Create(NULL, 0, rect, this, IDC_CTRL1); //GetSafeHwnd() return NULL!!
    ASSERT(CMyOcx->GetSafeHwnd());