svvitch
digital signage player
|
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 }