| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #include "stdafx.h"
- #include "FlashControl.h"
- /////////////////////////////////////////////////////////////////////////////
- // ShockwaveFlash
- IMPLEMENT_DYNCREATE(CFlashControl, CWnd)
- long CFlashControl::s_lCount = 0;
- CFlashControl::CFlashControl()
- {
- #if 0
- if (0 == InterlockedExchangeAdd((volatile long *)&s_lCount, 1))
- {
- TCHAR szWorkDirectory[MAX_PATH]={0};
- RenderEngine->GetWorkDirectory(szWorkDirectory,MAX_PATH);
- StrCat(szWorkDirectory,TEXT("\\Flash8.ocx"));
- HMODULE hmod=LoadLibrary (szWorkDirectory);
- ASSERT(hmod);
- if (hmod)
- {
- FARPROC pReg =GetProcAddress (hmod,"DllRegisterServer");
- (*pReg)();
- }
- }
- #endif
- m_bHasInit = FALSE;
- m_lOldProc = 0;
- m_pIFlashContrlSink = NULL;
- }
- CFlashControl::~CFlashControl()
- {
- #if 0
- if (1 == InterlockedExchangeAdd((volatile long *)&s_lCount, -1))
- {
- TCHAR szWorkDirectory[MAX_PATH]={0};
- RenderEngine->GetWorkDirectory(szWorkDirectory,MAX_PATH);
- StrCat(szWorkDirectory,TEXT("\\Flash8.ocx"));
- HMODULE hmod=LoadLibrary (szWorkDirectory);
- ASSERT(hmod);
- if (hmod)
- {
- FARPROC pReg =GetProcAddress (hmod,"DllUnregisterServer");
- (*pReg)();
- }
- }
- #endif
- }
- LRESULT CFlashControl::FlashWinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- CFlashControl *pFlashCtrl = (CFlashControl *)FromHandle(hWnd);
- ASSERT(pFlashCtrl);
- switch ( msg )
- {
- case WM_ERASEBKGND:
- {
- return TRUE;
- }
- case WM_PAINT:
- {
- if ( pFlashCtrl->m_pIFlashContrlSink != NULL )
- {
- CDC*pDC = pFlashCtrl->GetDC();
- CRect rcClient;
- pFlashCtrl->GetClientRect(&rcClient);
- pFlashCtrl->m_pIFlashContrlSink->OnDraw(pDC,rcClient.Width(),rcClient.Height());
- pFlashCtrl->ReleaseDC(pDC);
- }
- return 0;
- return CallWindowProc((WNDPROC)(pFlashCtrl->m_lOldProc), hWnd, msg, wParam, lParam);
- }
- case WM_RBUTTONDOWN:
- return 0;
- case WM_LBUTTONDOWN:
- {
- HWND hParentWnd = ::GetParent(hWnd);
- if ( hParentWnd != NULL )
- {
- UINT uID = pFlashCtrl->GetDlgCtrlID();
- ::PostMessage(hParentWnd,WM_COMMAND,uID,0);
- }
- break;
- }
- }
- if ( msg == 144 || msg == 8720 || msg == 24 || msg == 2 || msg == 130)
- {
- return 0;
- }
- //调用原来的窗口过程
- return CallWindowProc((WNDPROC)(pFlashCtrl->m_lOldProc), hWnd, msg, wParam, lParam);
- }
- BOOL CFlashControl::Init(IFlashContrlSink*pIFlashContrlSink)
- {
- if (FALSE == m_bHasInit)
- {
- m_lOldProc = SetWindowLong(m_hWnd, GWL_WNDPROC, (long)FlashWinProc);
- }
- m_pIFlashContrlSink = pIFlashContrlSink;
- m_bHasInit = TRUE;
- return TRUE;
- }
- BOOL CFlashControl::CreateControl( CWnd* pParentWnd )
- {
- if( !Create(NULL,WS_VISIBLE|WS_VISIBLE,CRect(0,0,0,0),pParentWnd,0) )
- return FALSE;
- m_pOwnWnd = this;
- return TRUE;
- }
- void CFlashControl::SetAttribute( LPCTSTR pstrName, LPCTSTR pstrValue )
- {
- ISkinControl::SetAttribute(pstrName,pstrValue);
- if( _tcscmp(pstrName, _T("path")) == 0 )
- {
- TCHAR szWorkDirectory[MAX_PATH]={0};
- RenderEngine->GetWorkDirectory(szWorkDirectory,MAX_PATH);
- StrCat(szWorkDirectory,TEXT("\\"));
- StrCat(szWorkDirectory,pstrValue);
- LoadMovie(0,szWorkDirectory);
- Play();
- }
- else if( _tcscmp(pstrName, _T("transparent")) == 0 )
- {
- if( _tcscmp(pstrValue, _T("true")) == 0 )
- put_WMode( _bstr_t(_T("Transparent") ) );
- }
- else if( _tcscmp(pstrName, _T("pos")) == 0 )
- {
- //TODO:必须初始化就先设置位置,否则不显示flash,原因没查
- tagPositionData _PositionData;
- LPTSTR pstr = NULL;
- _PositionData.nFixedPostion[0] = _tcstol(pstrValue, &pstr, 10); ASSERT(pstr);
- _PositionData.nFixedPostion[1] = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr);
- _PositionData.ptPosition.x = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr);
- _PositionData.ptPosition.y = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr);
- _PositionData.szSize.cx = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr);
- _PositionData.szSize.cy = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr);
- CRect rc;
- RenderEngine->GetRect(GetParent()->GetSafeHwnd(),&_PositionData,rc);
- SetWindowPos(NULL,rc.left,rc.top,rc.Width(),rc.Height(),SWP_NOACTIVATE);
- }
-
- }
|