svvitch
digital signage player
D:/vs_workspace/switch_sf/src/svvitch/ControlSite.cpp
Go to the documentation of this file.
00001 #include "ControlSite.h"
00002 #include "FlashContent.h"
00003 
00004 #include <Poco/format.h>
00005 
00006 using std::string;
00007 
00008 
00009 ControlSite::ControlSite(ComContentPtr com): _log(Poco::Logger::get("")), _com(com)
00010 {
00011     _ref = 0;
00012     ::SetRect(&_rect, 0, 0, 2000, 2000);
00013 }   
00014 
00015 ControlSite::‾ControlSite() {
00016 }
00017 
00018 void ControlSite::GetRect(LPRECT rect) {
00019     SetRect(rect, _rect.left, _rect.top, _rect.right, _rect.bottom);
00020     _log.information(Poco::format("get rect: %ld,%ld %ldx%ld", rect->left, rect->top, rect->right, rect->bottom));
00021 }
00022 
00023 HRESULT STDMETHODCALLTYPE ControlSite::QueryInterface(REFIID riid, LPVOID* ppv) {
00024     *ppv = NULL;
00025 
00026     if (riid == IID_IUnknown)
00027     {
00028         *ppv = (IUnknown*) (IOleWindow*) this;
00029         AddRef();
00030         return S_OK;
00031     }
00032     else if (riid == IID_IOleWindow)
00033     {
00034         *ppv = (IOleWindow*)this;
00035         AddRef();
00036         return S_OK;
00037     }
00038     else if (riid == IID_IOleInPlaceSite)
00039     {
00040         *ppv = (IOleInPlaceSite*)this;
00041         AddRef();
00042         return S_OK;
00043     }
00044     else if (riid == IID_IOleInPlaceSiteEx)
00045     {
00046         *ppv = (IOleInPlaceSiteEx*)this;
00047         AddRef();
00048         return S_OK;
00049     }
00050     else if (riid == IID_IOleInPlaceSiteWindowless)
00051     {
00052         *ppv = (IOleInPlaceSiteWindowless*)this;
00053         AddRef();
00054         return S_OK;
00055     }
00056     else if (riid == IID_IOleClientSite)
00057     {
00058         *ppv = (IOleClientSite*)this;
00059         AddRef();
00060         return S_OK;
00061     }
00062     else if (riid == __uuidof(ShockwaveFlashObjects::_IShockwaveFlashEvents))
00063     {
00064         *ppv = (ShockwaveFlashObjects::_IShockwaveFlashEvents*) this;
00065         AddRef();
00066         return S_OK;
00067     }
00068     else
00069     {   
00070         return E_NOTIMPL;
00071     }
00072 }
00073 
00074 
00075 ULONG STDMETHODCALLTYPE ControlSite::AddRef()
00076 {  
00077     return ++_ref;
00078 }
00079 
00080 ULONG STDMETHODCALLTYPE ControlSite::Release()
00081 { 
00082     int ref = --_ref;
00083     if (ref == 0)       
00084         delete this;        
00085 
00086     return ref;
00087 }
00088 
00090 
00091 HRESULT  STDMETHODCALLTYPE ControlSite::SaveObject(void) {
00092     return S_OK;
00093 }
00094 
00095 HRESULT  STDMETHODCALLTYPE ControlSite::GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker,IMoniker** ppmk ) {
00096     *ppmk = NULL;
00097     return E_NOTIMPL;
00098 }
00099 
00100 HRESULT STDMETHODCALLTYPE ControlSite::GetContainer(IOleContainer ** theContainerP) {
00101     //return QueryInterface(__uuidof(IOleContainer), (void**) theContainerP);               
00102     return E_NOINTERFACE;
00103 }
00104 
00105 
00106 HRESULT STDMETHODCALLTYPE ControlSite::ShowObject(void) {
00107     return E_NOTIMPL;
00108 }
00109 
00110 HRESULT  STDMETHODCALLTYPE ControlSite::OnShowWindow(BOOL) {
00111     return E_NOTIMPL;
00112 }
00113 
00114 HRESULT  STDMETHODCALLTYPE ControlSite::RequestNewObjectLayout(void) {
00115     return E_NOTIMPL;
00116 }
00117     //      
00118 
00119 
00120 HRESULT STDMETHODCALLTYPE ControlSite::ContextSensitiveHelp(/* [in] */ BOOL fEnterMode) {
00121     return S_OK;
00122 }
00123 
00124 HRESULT STDMETHODCALLTYPE ControlSite::GetWindow(/* [out] */ HWND __RPC_FAR* theWnndow) {
00125     return E_FAIL;
00126 }
00127 
00128 HRESULT STDMETHODCALLTYPE ControlSite::CanInPlaceActivate(void) {
00129     return S_OK;
00130 }
00131 
00132 
00133 HRESULT STDMETHODCALLTYPE ControlSite::OnInPlaceActivate(void) {        
00134     return S_OK;
00135 }
00136 
00137 
00138 HRESULT STDMETHODCALLTYPE ControlSite::OnUIActivate(void) {     
00139     return S_OK;
00140 }
00141 
00142 HRESULT STDMETHODCALLTYPE ControlSite::GetWindowContext(/* [out] */ IOleInPlaceFrame __RPC_FAR *__RPC_FAR *ppFrame, /* [out] */ IOleInPlaceUIWindow __RPC_FAR *__RPC_FAR *ppDoc, /* [out] */ LPRECT lprcPosRect, /* [out] */ LPRECT lprcClipRect, /* [out][in] */ LPOLEINPLACEFRAMEINFO lpFrameInfo) {
00143     //if (m_pFlashPlayer)
00144     {
00145         //RECT rcRect = m_pFlashPlayer->GetRect();
00146         RECT rcRect;
00147         //RECT rcRect = m_pFlashPlayer->m_rcDirtyRect;   
00148 
00149         *lprcPosRect = rcRect;
00150         *lprcClipRect = rcRect;
00151         
00152         *ppFrame = NULL;
00153         QueryInterface(__uuidof(IOleInPlaceFrame), (void**) ppFrame);       
00154         *ppDoc = NULL;
00155 
00156         lpFrameInfo->fMDIApp = FALSE;
00157         lpFrameInfo->hwndFrame = NULL;
00158         lpFrameInfo->haccel = NULL;
00159         lpFrameInfo->cAccelEntries = 0;
00160 
00161         return S_OK;
00162     }
00163 
00164     return E_FAIL;
00165 }
00166 
00167 
00168 HRESULT STDMETHODCALLTYPE ControlSite::Scroll(/* [in] */ SIZE scrollExtant) {
00169     return S_OK;
00170 }
00171 
00172 HRESULT STDMETHODCALLTYPE ControlSite::OnUIDeactivate(/* [in] */ BOOL fUndoable) {      
00173     return S_OK;
00174 }
00175 
00176 
00177 HRESULT STDMETHODCALLTYPE ControlSite::OnInPlaceDeactivate(void) {  
00178     return S_OK;
00179 }
00180 
00181 
00182 HRESULT STDMETHODCALLTYPE ControlSite::DiscardUndoState(void) {
00183     return S_OK;
00184 }
00185 
00186 
00187 HRESULT STDMETHODCALLTYPE ControlSite::DeactivateAndUndo(void) {
00188     return S_OK;
00189 }
00190 
00191 
00192 HRESULT STDMETHODCALLTYPE ControlSite::OnPosRectChange(/* [in] */ LPCRECT rect) {
00193     _log.information(Poco::format("change pos/rect: %ld,%ld %ldx%ld", rect->left, rect->top, rect->right, rect->bottom));
00194     return S_OK;
00195 }
00196 
00197 HRESULT STDMETHODCALLTYPE ControlSite::OnInPlaceActivateEx(/* [out] */ BOOL __RPC_FAR *pfNoRedraw, /* [in] */ DWORD dwFlags) {
00198     return S_OK;
00199 }
00200 
00201 
00202 HRESULT STDMETHODCALLTYPE ControlSite::OnInPlaceDeactivateEx(/* [in] */ BOOL fNoRedraw) {
00203     return S_OK;
00204 }
00205 
00206 
00207 HRESULT STDMETHODCALLTYPE ControlSite::RequestUIActivate(void) {
00208     return S_FALSE;
00209 }
00210 
00211 
00212 HRESULT STDMETHODCALLTYPE ControlSite::CanWindowlessActivate(void) {
00213     // Allow windowless activation?
00214     return S_OK;
00215 }
00216 
00217 
00218 HRESULT STDMETHODCALLTYPE ControlSite::GetCapture(void) {
00219     // TODO capture the mouse for the object
00220     return S_FALSE;
00221 }
00222 
00223 
00224 HRESULT STDMETHODCALLTYPE ControlSite::SetCapture(/* [in] */ BOOL fCapture) {
00225     // TODO capture the mouse for the object
00226     return S_FALSE;
00227 }
00228 
00229 
00230 HRESULT STDMETHODCALLTYPE ControlSite::GetFocus(void) {
00231     return S_OK;
00232 }
00233 
00234 
00235 HRESULT STDMETHODCALLTYPE ControlSite::SetFocus(/* [in] */ BOOL fFocus) {
00236     return S_OK;
00237 }
00238 
00239 HRESULT STDMETHODCALLTYPE ControlSite::GetDC(/* [in] */ LPCRECT pRect, /* [in] */ DWORD grfFlags, /* [out] */ HDC __RPC_FAR *phDC) {
00240     return E_INVALIDARG;        
00241 }
00242 
00243 
00244 HRESULT STDMETHODCALLTYPE ControlSite::ReleaseDC(/* [in] */ HDC hDC) {
00245     return E_INVALIDARG;
00246 }
00247 
00248 
00249 HRESULT STDMETHODCALLTYPE ControlSite::InvalidateRect(/* [in] */ LPCRECT rect, /* [in] */ BOOL erase) {
00250     if (rect) {
00251         SetRect(&_rect, rect->left, rect->top, rect->right, rect->bottom);
00252         _com->invalidateRect(rect->left, rect->top, rect->right, rect->bottom);
00253         //_log.information(Poco::format("invalidate rect: %ld,%ld %ldx%ld %s", rect->left, rect->top, rect->right, rect->bottom, string(erase?"true":"false")));
00254     }
00255     
00256     return S_OK;
00257 }
00258 
00259 HRESULT STDMETHODCALLTYPE ControlSite::InvalidateRgn(/* [in] */ HRGN hRGN, /* [in] */ BOOL fErase) {
00260     //m_pFlashPlayer->m_rcDirtyRect = m_pFlashPlayer->GetRect();
00261     //m_pFlashPlayer->m_bFlashDirty = true;
00262     return S_OK;
00263 }
00264 
00265 HRESULT STDMETHODCALLTYPE ControlSite::ScrollRect(/* [in] */ INT dx, /* [in] */ INT dy, /* [in] */ LPCRECT pRectScroll, /* [in] */ LPCRECT pRectClip) {
00266     return S_OK;
00267 }
00268 
00269 HRESULT STDMETHODCALLTYPE ControlSite::AdjustRect(/* [out][in] */ LPRECT rect) {
00270     if (rect == NULL) {
00271         return E_INVALIDARG;
00272     }
00273     _log.information(Poco::format("adjust rect: %ld,%ld %ldx%ld", rect->left, rect->top, rect->right, rect->bottom));
00274     return S_OK;
00275 }
00276 
00277 HRESULT STDMETHODCALLTYPE ControlSite::OnDefWindowMessage(/* [in] */ UINT msg, /* [in] */ WPARAM wParam, /* [in] */ LPARAM lParam, /* [out] */ LRESULT __RPC_FAR *plResult) {
00278     return S_FALSE;
00279 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines