X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c493691d6249650c0366fd9aaaca8572e3ff3edd..848c37c35b42e3e18e98a578f794172b8f2c46d0:/src/msw/ole/activex.cpp diff --git a/src/msw/ole/activex.cpp b/src/msw/ole/activex.cpp index 954c79c0e5..5b086b77db 100644 --- a/src/msw/ole/activex.cpp +++ b/src/msw/ole/activex.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: msw/ole/activex.cpp +// Name: src/msw/ole/activex.cpp // Purpose: wxActiveXContainer implementation // Author: Ryan Norton , Lindsay Mathieson // Modified by: @@ -24,6 +24,7 @@ #endif #include "wx/dcclient.h" +#include "wx/math.h" #include "wx/msw/ole/activex.h" @@ -58,21 +59,21 @@ if (! ppvObject)\ {\ return E_FAIL;\ - };\ + }\ const char *desc = NULL;\ cls::_GetInterface(this, iid, ppvObject, desc);\ if (! *ppvObject)\ {\ return E_NOINTERFACE;\ - };\ + }\ ((IUnknown * )(*ppvObject))->AddRef();\ return S_OK;\ - };\ + }\ ULONG STDMETHODCALLTYPE cls::AddRef()\ {\ InterlockedIncrement(&refCount.l);\ return refCount.l;\ - };\ + }\ ULONG STDMETHODCALLTYPE cls::Release()\ {\ if (refCount.l > 0)\ @@ -82,7 +83,7 @@ {\ delete this;\ return 0;\ - };\ + }\ return refCount.l;\ }\ else\ @@ -92,7 +93,7 @@ {\ InterlockedIncrement(&lockCount.l);\ return lockCount.l;\ - };\ + }\ ULONG STDMETHODCALLTYPE cls::ReleaseLock()\ {\ if (lockCount.l > 0)\ @@ -206,7 +207,7 @@ public: case DISPID_AMBIENT_SILENT: V_BOOL(pVarResult)= TRUE; return S_OK; - +#ifndef __WINE__ case DISPID_AMBIENT_APPEARANCE: pVarResult->vt = VT_BOOL; pVarResult->boolVal = m_bAmbientAppearance; @@ -241,7 +242,7 @@ public: pVarResult->vt = VT_BOOL; pVarResult->boolVal = m_bAmbientShowHatching; break; - +#endif default: return DISP_E_MEMBERNOTFOUND; } @@ -325,7 +326,7 @@ public: if (! SUCCEEDED(hr)) { return E_UNEXPECTED; - }; + } hr = QueryInterface(IID_IOleInPlaceUIWindow, (void **) ppDoc); if (! SUCCEEDED(hr)) @@ -333,7 +334,7 @@ public: (*ppFrame)->Release(); *ppFrame = NULL; return E_UNEXPECTED; - }; + } RECT rect; ::GetClientRect(m_hWndParent, &rect); @@ -342,13 +343,13 @@ public: 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); @@ -375,7 +376,17 @@ public: //*************************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; @@ -383,7 +394,17 @@ public: 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;} @@ -398,8 +419,8 @@ public: case OLEGETMONIKER_UNASSIGN : return "OLEGETMONIKER_UNASSIGN"; case OLEGETMONIKER_TEMPFORUSER : return "OLEGETMONIKER_TEMPFORUSER"; default : return "Bad Enum"; - }; - }; + } + } const char *OleGetWhicMonikerStr(DWORD dwWhichMoniker) { @@ -409,8 +430,8 @@ public: 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) { @@ -437,7 +458,9 @@ public: HRESULT STDMETHODCALLTYPE LockContainer(BOOL){return S_OK;} //********************IOleItemContainer*************************** HRESULT STDMETHODCALLTYPE - #ifdef _UNICODE + #if defined(__WXWINCE__) + GetObject + #elif defined(_UNICODE) GetObjectW #else GetObjectA @@ -535,11 +558,11 @@ public: return E_FAIL; m_window->m_docView->SetInPlaceSite(inPlaceSite); - }; + } m_window->m_docView->UIActivate(TRUE); return S_OK; - }; + } protected: @@ -578,7 +601,7 @@ DEFINE_OLE_TABLE(FrameSite) OLE_IINTERFACE(IOleDocumentSite) OLE_IINTERFACE(IAdviseSink) OLE_IINTERFACE(IOleControlSite) -END_OLE_TABLE; +END_OLE_TABLE wxActiveXContainer::wxActiveXContainer(wxWindow * parent, REFIID iid, IUnknown* pUnk) @@ -741,7 +764,7 @@ static void PixelsToHimetric(SIZEL &sz) }; #define HIMETRIC_INCH 2540 -#define CONVERT(x, logpixels) MulDiv(HIMETRIC_INCH, (x), (logpixels)) +#define CONVERT(x, logpixels) wxMulDivInt32(HIMETRIC_INCH, (x), (logpixels)) sz.cx = CONVERT(sz.cx, logX); sz.cy = CONVERT(sz.cy, logY); @@ -790,7 +813,6 @@ void wxActiveXContainer::OnPaint(wxPaintEvent& WXUNUSED(event)) // Draw only when control is windowless or deactivated if (m_viewObject) { - dc.BeginDrawing(); int w, h; GetParent()->GetSize(&w, &h); RECT posRect; @@ -799,12 +821,14 @@ void wxActiveXContainer::OnPaint(wxPaintEvent& WXUNUSED(event)) posRect.right = w; posRect.bottom = h; +#if defined(_WIN32_WCE) && _WIN32_WCE < 400 + ::InvalidateRect(m_oleObjectHWND, NULL, false); +#else ::RedrawWindow(m_oleObjectHWND, NULL, NULL, RDW_INTERNALPAINT); +#endif RECTL *prcBounds = (RECTL *) &posRect; m_viewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL, NULL, (HDC)dc.GetHDC(), prcBounds, NULL, NULL, 0); - - dc.EndDrawing(); } // We've got this one I think