⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 activex.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        {            (*ppFrame)->Release();            *ppFrame = NULL;            return E_UNEXPECTED;        }        RECT rect;        ::GetClientRect(m_hWndParent, &rect);        if (lprcPosRect)        {            lprcPosRect->left = lprcPosRect->top = 0;            lprcPosRect->right = rect.right;            lprcPosRect->bottom = rect.bottom;        }        if (lprcClipRect)        {            lprcClipRect->left = lprcClipRect->top = 0;            lprcClipRect->right = rect.right;            lprcClipRect->bottom = rect.bottom;        }        memset(lpFrameInfo, 0, sizeof(OLEINPLACEFRAMEINFO));        lpFrameInfo->cb = sizeof(OLEINPLACEFRAMEINFO);        lpFrameInfo->hwndFrame = m_hWndParent;        return S_OK;    }    HRESULT STDMETHODCALLTYPE Scroll(SIZE){return S_OK;}    HRESULT STDMETHODCALLTYPE OnUIDeactivate(BOOL)    {   m_bUIActive = false;         return S_OK;    }    HRESULT STDMETHODCALLTYPE OnInPlaceDeactivate()    {   m_bInPlaceActive = false;    return S_OK;    }    HRESULT STDMETHODCALLTYPE DiscardUndoState(){return S_OK;}    HRESULT STDMETHODCALLTYPE DeactivateAndUndo(){return S_OK; }    HRESULT STDMETHODCALLTYPE OnPosRectChange(LPCRECT lprcPosRect)    {        if (m_window->m_oleInPlaceObject.Ok() && lprcPosRect)        {           //           // Result of several hours and days of bug hunting -           // this is called by an object when it wants to resize           // itself to something different then our parent window -           // don't let it :)           ////            m_window->m_oleInPlaceObject->SetObjectRects(//                lprcPosRect, lprcPosRect);           RECT rcClient;           ::GetClientRect(m_hWndParent, &rcClient);            m_window->m_oleInPlaceObject->SetObjectRects(                &rcClient, &rcClient);        }        return S_OK;    }    //*************************IOleInPlaceSiteEx***********************    HRESULT STDMETHODCALLTYPE OnInPlaceActivateEx(BOOL * pfNoRedraw, DWORD)    {#ifdef __WXWINCE__        IRunnableObject* runnable = NULL;        HRESULT hr = QueryInterface(            IID_IRunnableObject, (void**)(& runnable));        if (SUCCEEDED(hr))        {            runnable->LockRunning(TRUE, FALSE);        }#else        OleLockRunning(m_window->m_ActiveX, TRUE, FALSE);#endif        if (pfNoRedraw)            (*pfNoRedraw) = FALSE;        return S_OK;    }    HRESULT STDMETHODCALLTYPE OnInPlaceDeactivateEx(BOOL)    {#ifdef __WXWINCE__        IRunnableObject* runnable = NULL;        HRESULT hr = QueryInterface(            IID_IRunnableObject, (void**)(& runnable));        if (SUCCEEDED(hr))        {            runnable->LockRunning(FALSE, FALSE);        }#else        OleLockRunning(m_window->m_ActiveX, FALSE, FALSE);#endif        return S_OK;    }    STDMETHOD(RequestUIActivate)(){ return S_OK;}    //*************************IOleClientSite**************************    HRESULT STDMETHODCALLTYPE SaveObject(){return S_OK;}    const char *OleGetMonikerToStr(DWORD dwAssign)    {        switch (dwAssign)        {        case OLEGETMONIKER_ONLYIFTHERE  : return "OLEGETMONIKER_ONLYIFTHERE";        case OLEGETMONIKER_FORCEASSIGN  : return "OLEGETMONIKER_FORCEASSIGN";        case OLEGETMONIKER_UNASSIGN     : return "OLEGETMONIKER_UNASSIGN";        case OLEGETMONIKER_TEMPFORUSER  : return "OLEGETMONIKER_TEMPFORUSER";        default                         : return "Bad Enum";        }    }    const char *OleGetWhicMonikerStr(DWORD dwWhichMoniker)    {        switch(dwWhichMoniker)        {        case OLEWHICHMK_CONTAINER   : return "OLEWHICHMK_CONTAINER";        case OLEWHICHMK_OBJREL      : return "OLEWHICHMK_OBJREL";        case OLEWHICHMK_OBJFULL     : return "OLEWHICHMK_OBJFULL";        default                     : return "Bad Enum";        }    }    STDMETHOD(GetMoniker)(DWORD, DWORD, IMoniker **){return E_FAIL;}    HRESULT STDMETHODCALLTYPE GetContainer(LPOLECONTAINER * ppContainer)    {        if (ppContainer == NULL)            return E_INVALIDARG;        HRESULT hr = QueryInterface(            IID_IOleContainer, (void**)(ppContainer));        wxASSERT(SUCCEEDED(hr));        return hr;    }    HRESULT STDMETHODCALLTYPE ShowObject()    {        if (m_window->m_oleObjectHWND)            ::ShowWindow(m_window->m_oleObjectHWND, SW_SHOW);        return S_OK;    }    STDMETHOD(OnShowWindow)(BOOL){return S_OK;}    STDMETHOD(RequestNewObjectLayout)(){return E_NOTIMPL;}    //********************IParseDisplayName***************************    HRESULT STDMETHODCALLTYPE ParseDisplayName(        IBindCtx *, LPOLESTR, ULONG *, IMoniker **){return E_NOTIMPL;}    //********************IOleContainer*******************************    STDMETHOD(EnumObjects)(DWORD, IEnumUnknown **){return E_NOTIMPL;}    HRESULT STDMETHODCALLTYPE LockContainer(BOOL){return S_OK;}    //********************IOleItemContainer***************************    HRESULT STDMETHODCALLTYPE    #if 0 // defined(__WXWINCE__) && __VISUALC__ < 1400    GetObject    #elif defined(_UNICODE)    GetObjectW    #else    GetObjectA    #endif    (LPOLESTR pszItem, DWORD, IBindCtx *, REFIID, void ** ppvObject)    {        if (pszItem == NULL || ppvObject == NULL)            return E_INVALIDARG;        *ppvObject = NULL;        return MK_E_NOOBJECT;    }    HRESULT STDMETHODCALLTYPE GetObjectStorage(        LPOLESTR pszItem, IBindCtx * , REFIID, void ** ppvStorage)    {        if (pszItem == NULL || ppvStorage == NULL)            return E_INVALIDARG;        *ppvStorage = NULL;        return MK_E_NOOBJECT;    }    HRESULT STDMETHODCALLTYPE IsRunning(LPOLESTR pszItem)    {        if (pszItem == NULL)            return E_INVALIDARG;        return MK_E_NOOBJECT;    }    //***********************IOleControlSite*****************************    HRESULT STDMETHODCALLTYPE OnControlInfoChanged()    {return S_OK;}    HRESULT STDMETHODCALLTYPE LockInPlaceActive(BOOL fLock)    {        m_bInPlaceLocked = (fLock) ? true : false;        return S_OK;    }    HRESULT STDMETHODCALLTYPE GetExtendedControl(IDispatch **)    {return E_NOTIMPL;}    HRESULT STDMETHODCALLTYPE TransformCoords(        POINTL * pPtlHimetric, POINTF * pPtfContainer, DWORD)    {        if (pPtlHimetric == NULL || pPtfContainer == NULL)            return E_INVALIDARG;        return E_NOTIMPL;    }    HRESULT STDMETHODCALLTYPE TranslateAccelerator(LPMSG, DWORD)    {return E_NOTIMPL;}    HRESULT STDMETHODCALLTYPE OnFocus(BOOL){return S_OK;}    HRESULT STDMETHODCALLTYPE ShowPropertyFrame(){return E_NOTIMPL;}    //**************************IOleCommandTarget***********************    HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *, ULONG cCmds,                                OLECMD prgCmds[], OLECMDTEXT *)    {        if (prgCmds == NULL) return E_INVALIDARG;        for (ULONG nCmd = 0; nCmd < cCmds; nCmd++)        {            // unsupported by default            prgCmds[nCmd].cmdf = 0;        }        return OLECMDERR_E_UNKNOWNGROUP;    }    HRESULT STDMETHODCALLTYPE Exec(const GUID *, DWORD,                            DWORD, VARIANTARG *, VARIANTARG *)    {return OLECMDERR_E_NOTSUPPORTED;}    //**********************IAdviseSink************************************    void STDMETHODCALLTYPE OnDataChange(FORMATETC *, STGMEDIUM *) {}    void STDMETHODCALLTYPE OnViewChange(DWORD, LONG) {}    void STDMETHODCALLTYPE OnRename(IMoniker *){}    void STDMETHODCALLTYPE OnSave(){}    void STDMETHODCALLTYPE OnClose(){}    //**********************IOleDocumentSite***************************    HRESULT STDMETHODCALLTYPE ActivateMe(        IOleDocumentView __RPC_FAR *pViewToActivate)    {        wxAutoIOleInPlaceSite inPlaceSite(            IID_IOleInPlaceSite, (IDispatch *) this);        if (!inPlaceSite.Ok())            return E_FAIL;        if (pViewToActivate)        {            m_window->m_docView = pViewToActivate;            m_window->m_docView->SetInPlaceSite(inPlaceSite);        }        else        {            wxAutoIOleDocument oleDoc(                IID_IOleDocument, m_window->m_oleObject);            if (! oleDoc.Ok())                return E_FAIL;            HRESULT hr = oleDoc->CreateView(inPlaceSite, NULL,                                    0, m_window->m_docView.GetRef());            if (hr != S_OK)                return E_FAIL;            m_window->m_docView->SetInPlaceSite(inPlaceSite);        }        m_window->m_docView->UIActivate(TRUE);        return S_OK;    }protected:    wxActiveXContainer * m_window;    HDC m_hDCBuffer;    HWND m_hWndParent;    bool m_bSupportsWindowlessActivation;    bool m_bInPlaceLocked;    bool m_bInPlaceActive;    bool m_bUIActive;    bool m_bWindowless;    LCID m_nAmbientLocale;    COLORREF m_clrAmbientForeColor;    COLORREF m_clrAmbientBackColor;    bool m_bAmbientShowHatching;    bool m_bAmbientShowGrabHandles;    bool m_bAmbientAppearance;};DEFINE_OLE_TABLE(FrameSite)    OLE_INTERFACE(IID_IUnknown, IOleClientSite)    OLE_IINTERFACE(IOleClientSite)    OLE_INTERFACE(IID_IOleWindow, IOleInPlaceSite)    OLE_IINTERFACE(IOleInPlaceSite)    OLE_IINTERFACE(IOleInPlaceSiteEx)    OLE_IINTERFACE(IOleInPlaceUIWindow)    OLE_IINTERFACE(IOleInPlaceFrame)    OLE_IINTERFACE(IParseDisplayName)    OLE_IINTERFACE(IOleContainer)    OLE_IINTERFACE(IOleItemContainer)    OLE_IINTERFACE(IDispatch)    OLE_IINTERFACE(IOleCommandTarget)    OLE_IINTERFACE(IOleDocumentSite)    OLE_IINTERFACE(IAdviseSink)    OLE_IINTERFACE(IOleControlSite)END_OLE_TABLE//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//// wxActiveXEvents//// Handles and sends activex events received from the ActiveX control// to the appropriate wxEvtHandler////+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++class wxActiveXEvents : public IDispatch{private:    DECLARE_OLE_UNKNOWN(wxActiveXEvents);    wxActiveXContainer *m_activeX;    IID m_customId;    bool m_haveCustomId;    friend bool wxActiveXEventsInterface(wxActiveXEvents *self, REFIID iid, void **_interface, const char *&desc);public:    wxActiveXEvents(wxActiveXContainer *ax) : m_activeX(ax), m_haveCustomId(false) {}    wxActiveXEvents(wxActiveXContainer *ax, REFIID iid) : m_activeX(ax), m_customId(iid), m_haveCustomId(true) {}    virtual ~wxActiveXEvents()    {    }    // IDispatch    STDMETHODIMP GetIDsOfNames(REFIID, OLECHAR**, unsigned int, LCID, DISPID*)    {        return E_NOTIMPL;    }    STDMETHODIMP GetTypeInfo(unsigned int, LCID, ITypeInfo**)    {        return E_NOTIMPL;    }    STDMETHODIMP GetTypeInfoCount(unsigned int*)    {        return E_NOTIMPL;    }    STDMETHODIMP Invoke(DISPID dispIdMember, REFIID WXUNUSED(riid),                        LCID WXUNUSED(lcid),                          WORD wFlags, DISPPARAMS * pDispParams,                          VARIANT * WXUNUSED(pVarResult), EXCEPINFO * WXUNUSED(pExcepInfo),                          unsigned int * WXUNUSED(puArgErr))    {        if (wFlags & (DISPATCH_PROPERTYGET | DISPATCH_PROPERTYPUT | DISPATCH_PROPERTYPUTREF))            return E_NOTIMPL;        wxASSERT(m_activeX);        // ActiveX Event        // Dispatch Event        wxActiveXEvent  event;        event.SetEventType(wxEVT_ACTIVEX);        event.m_params.NullList();        event.m_dispid = dispIdMember;        // arguments        if (pDispParams)        {            for (DWORD i = pDispParams->cArgs; i > 0; i--)            {                VARIANTARG& va = pDispParams->rgvarg[i-1];                wxVariant vx;//                        vx.SetName(px.name);                wxConvertOleToVariant(va, vx);                event.m_params.Append(vx);            }        }        // process the events from the activex method           m_activeX->ProcessEvent(event);        for (DWORD i = 0; i < pDispParams->cArgs; i++)        {            VARIANTARG& va = pDispParams->rgvarg[i];            wxVariant& vx =                event.m_params[pDispParams->cArgs - i - 1];            wxConvertVariantToOle(vx, va);        }        if(event.GetSkipped())            return DISP_E_MEMBERNOTFOUND;        return S_OK;    }};bool wxActiveXEventsInterface(wxActiveXEvents *self, REFIID iid, void **_interface, const char *&desc){    if (self->m_haveCustomId && IsEqualIID(iid, self->m_customId))    {//        WXOLE_TRACE("Found Custom Dispatch Interface");        *_interface = (IUnknown *) (IDispatch *) self;        desc = "Custom Dispatch Interface";        return true;    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -