📄 flashwnd.h
字号:
/******************************************************************
***
***
*** FREE WINDOWLESS FLASH CONTROL
***
*** by Makarov Igor
***
*** for questions and remarks mailto: mak_july@list.ru
***
***
*******************************************************************/
// FlashWnd.h: interface for the CFlashWnd class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_FLASHWND_H__D74EA89B_5D79_4D87_8BB9_4DB90A5FE8FC__INCLUDED_)
#define AFX_FLASHWND_H__D74EA89B_5D79_4D87_8BB9_4DB90A5FE8FC__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//#import "c:\\winnt\\system32\\macromed\\flash\\flash.ocx" named_guids
#import "C:\\WINDOWS\\system32\\Macromed\\Flash\\Flash9e.ocx" //named_guids
#define NOTIMPLEMENTED return E_NOTIMPL
#define OLECONTAINER_DEF template <class TObj>
#define OLECONTAINER_DEF2 TObj
#define OLECONTAINER_CONSTRUCT OLECONTAINER_DEF COleContainerWnd<OLECONTAINER_DEF2>
#define OLECONTAINER(type) OLECONTAINER_DEF type COleContainerWnd<OLECONTAINER_DEF2>
#define OLE_IUNKNOWN_DECLARE \
int m_iRef; \
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void ** ppvObject); \
ULONG STDMETHODCALLTYPE AddRef(); \
ULONG STDMETHODCALLTYPE Release();
OLECONTAINER_DEF class COleContainerWnd :
virtual public IOleClientSite,
virtual public IOleInPlaceSiteWindowless,
virtual public IOleInPlaceFrame,
virtual public IStorage
{
public:
GUID m_CLSID;
TObj *m_lpControl;
IOleObject *m_lpO;
IViewObjectEx *m_lpViewObject;
IViewObjectEx *m_lpViewObjectEx;
IOleInPlaceObject *m_lpInPlaceObj;
IOleInPlaceObjectWindowless *m_lpInPlaceObjWindowless;
IConnectionPointContainer *m_lpConCont;
IConnectionPoint *m_lpConPoint;
HWND m_hWnd, m_hWndParent;
HINSTANCE m_hInst;
BOOL m_bChild;
BOOL m_bTransparent;
BOOL m_bFixTransparency;
DWORD m_dwConPointID;
HDC m_hdcBack;
HBITMAP m_bmpBack;
RECT m_rcBounds;
BYTE *m_lpBitsOnly;
int m_iBPP;
HDC m_hdcBackW;
HBITMAP m_bmpBackW;
BYTE *m_lpBitsOnlyW;
public:
COleContainerWnd();
virtual ~COleContainerWnd();
static LRESULT CALLBACK WndProcStatic(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
HWND GetHWND() { assert(m_hWnd); return m_hWnd; }
HWND GetParentWindow() { assert(m_hWndParent); return m_hWndParent; }
HWND GetInstance() { assert(m_hInst); return m_hInst; }
public:
virtual BOOL Create(GUID clsid, DWORD dwExStyle, DWORD dwStyle, HWND hWndParent, HINSTANCE hInst);
virtual void Draw(HDC hdcDraw, const RECT *rcDraw, BOOL bErase);
//ole container events
virtual void OnErrorClassNotReg();
virtual BOOL OnBeforeShowingContent();
virtual BOOL OnAfterShowingContent();
public:
//interface methods
//IUnknown
int m_iRef;
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void ** ppvObject);
ULONG STDMETHODCALLTYPE AddRef();
ULONG STDMETHODCALLTYPE Release();
//IOleClientSite
virtual HRESULT STDMETHODCALLTYPE SaveObject();
virtual HRESULT STDMETHODCALLTYPE GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, IMoniker ** ppmk);
virtual HRESULT STDMETHODCALLTYPE GetContainer(LPOLECONTAINER FAR* ppContainer);
virtual HRESULT STDMETHODCALLTYPE ShowObject();
virtual HRESULT STDMETHODCALLTYPE OnShowWindow(BOOL fShow);
virtual HRESULT STDMETHODCALLTYPE RequestNewObjectLayout();
//IOleInPlaceSite
virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND FAR* lphwnd);
virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
virtual HRESULT STDMETHODCALLTYPE CanInPlaceActivate();
virtual HRESULT STDMETHODCALLTYPE OnInPlaceActivate();
virtual HRESULT STDMETHODCALLTYPE OnUIActivate();
virtual HRESULT STDMETHODCALLTYPE GetWindowContext(LPOLEINPLACEFRAME FAR* lplpFrame,LPOLEINPLACEUIWINDOW FAR* lplpDoc,LPRECT lprcPosRect,LPRECT lprcClipRect,LPOLEINPLACEFRAMEINFO lpFrameInfo);
virtual HRESULT STDMETHODCALLTYPE Scroll(SIZE scrollExtent);
virtual HRESULT STDMETHODCALLTYPE OnUIDeactivate(BOOL fUndoable);
virtual HRESULT STDMETHODCALLTYPE OnInPlaceDeactivate();
virtual HRESULT STDMETHODCALLTYPE DiscardUndoState();
virtual HRESULT STDMETHODCALLTYPE DeactivateAndUndo();
virtual HRESULT STDMETHODCALLTYPE OnPosRectChange(LPCRECT lprcPosRect);
//IOleInPlaceSiteEx
virtual HRESULT STDMETHODCALLTYPE OnInPlaceActivateEx(BOOL __RPC_FAR *pfNoRedraw, DWORD dwFlags);
virtual HRESULT STDMETHODCALLTYPE OnInPlaceDeactivateEx(BOOL fNoRedraw);
virtual HRESULT STDMETHODCALLTYPE RequestUIActivate(void);
//IOleInPlaceSiteWindowless
virtual HRESULT STDMETHODCALLTYPE CanWindowlessActivate( void);
virtual HRESULT STDMETHODCALLTYPE GetCapture( void);
virtual HRESULT STDMETHODCALLTYPE SetCapture(
/* [in] */ BOOL fCapture);
virtual HRESULT STDMETHODCALLTYPE GetFocus( void);
virtual HRESULT STDMETHODCALLTYPE SetFocus(
/* [in] */ BOOL fFocus);
virtual HRESULT STDMETHODCALLTYPE GetDC(
/* [in] */ LPCRECT pRect,
/* [in] */ DWORD grfFlags,
/* [out] */ HDC __RPC_FAR *phDC);
virtual HRESULT STDMETHODCALLTYPE ReleaseDC(
/* [in] */ HDC hDC);
virtual HRESULT STDMETHODCALLTYPE InvalidateRect(
/* [in] */ LPCRECT pRect,
/* [in] */ BOOL fErase);
virtual HRESULT STDMETHODCALLTYPE InvalidateRgn(
/* [in] */ HRGN hRGN,
/* [in] */ BOOL fErase);
virtual HRESULT STDMETHODCALLTYPE ScrollRect(
/* [in] */ INT dx,
/* [in] */ INT dy,
/* [in] */ LPCRECT pRectScroll,
/* [in] */ LPCRECT pRectClip);
virtual HRESULT STDMETHODCALLTYPE AdjustRect(
/* [out][in] */ LPRECT prc);
virtual HRESULT STDMETHODCALLTYPE OnDefWindowMessage(
/* [in] */ UINT msg,
/* [in] */ WPARAM wParam,
/* [in] */ LPARAM lParam,
/* [out] */ LRESULT __RPC_FAR *plResult);
//IOleInPlaceFrame
// virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND FAR* lphwnd);
// virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
virtual HRESULT STDMETHODCALLTYPE GetBorder(LPRECT lprectBorder);
virtual HRESULT STDMETHODCALLTYPE RequestBorderSpace(LPCBORDERWIDTHS pborderwidths);
virtual HRESULT STDMETHODCALLTYPE SetBorderSpace(LPCBORDERWIDTHS pborderwidths);
virtual HRESULT STDMETHODCALLTYPE SetActiveObject(IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName);
virtual HRESULT STDMETHODCALLTYPE InsertMenus(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths);
virtual HRESULT STDMETHODCALLTYPE SetMenu(HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject);
virtual HRESULT STDMETHODCALLTYPE RemoveMenus(HMENU hmenuShared);
virtual HRESULT STDMETHODCALLTYPE SetStatusText(LPCOLESTR pszStatusText);
virtual HRESULT STDMETHODCALLTYPE EnableModeless(BOOL fEnable);
virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator(LPMSG lpmsg, WORD wID);
//IStorage
virtual HRESULT STDMETHODCALLTYPE CreateStream(const WCHAR *pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream **ppstm);
virtual HRESULT STDMETHODCALLTYPE OpenStream(const WCHAR * pwcsName, void *reserved1, DWORD grfMode, DWORD reserved2, IStream **ppstm);
virtual HRESULT STDMETHODCALLTYPE CreateStorage(const WCHAR *pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStorage **ppstg);
virtual HRESULT STDMETHODCALLTYPE OpenStorage(const WCHAR * pwcsName, IStorage * pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstg);
virtual HRESULT STDMETHODCALLTYPE CopyTo(DWORD ciidExclude, IID const *rgiidExclude, SNB snbExclude,IStorage *pstgDest);
virtual HRESULT STDMETHODCALLTYPE MoveElementTo(const OLECHAR *pwcsName,IStorage * pstgDest, const OLECHAR *pwcsNewName, DWORD grfFlags);
virtual HRESULT STDMETHODCALLTYPE Commit(DWORD grfCommitFlags);
virtual HRESULT STDMETHODCALLTYPE Revert();
virtual HRESULT STDMETHODCALLTYPE EnumElements(DWORD reserved1, void * reserved2, DWORD reserved3, IEnumSTATSTG ** ppenum);
virtual HRESULT STDMETHODCALLTYPE DestroyElement(const OLECHAR *pwcsName);
virtual HRESULT STDMETHODCALLTYPE RenameElement(const WCHAR *pwcsOldName, const WCHAR *pwcsNewName);
virtual HRESULT STDMETHODCALLTYPE SetElementTimes(const WCHAR *pwcsName, FILETIME const *pctime, FILETIME const *patime, FILETIME const *pmtime);
virtual HRESULT STDMETHODCALLTYPE SetClass(REFCLSID clsid);
virtual HRESULT STDMETHODCALLTYPE SetStateBits(DWORD grfStateBits, DWORD grfMask);
virtual HRESULT STDMETHODCALLTYPE Stat(STATSTG * pstatstg, DWORD grfStatFlag);
//IDispatch
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(
/* [out] */ UINT __RPC_FAR *pctinfo);
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
/* [in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Invoke(
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
/* [out] */ VARIANT __RPC_FAR *pVarResult,
/* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
/* [out] */ UINT __RPC_FAR *puArgErr);
};
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
OLECONTAINER_CONSTRUCT::COleContainerWnd()
{
m_lpControl = NULL;
m_lpO = NULL;
m_lpViewObjectEx = NULL;
m_lpViewObject = NULL;
m_lpInPlaceObj = NULL;
m_lpInPlaceObjWindowless = NULL;
m_lpConCont = NULL;
m_lpConPoint = NULL;
m_hdcBack = NULL;
m_bmpBack = NULL;
m_hdcBackW = NULL;
m_bmpBackW = NULL;
m_rcBounds.left = m_rcBounds.top = m_rcBounds.right = m_rcBounds.bottom = 0;
m_lpBitsOnly = NULL;
m_lpBitsOnlyW = NULL;
m_iBPP = 0;
m_dwConPointID = 0;
m_bTransparent = FALSE;
m_bFixTransparency = FALSE;
m_iRef = 0;
}
OLECONTAINER_CONSTRUCT::~COleContainerWnd()
{
if (m_lpControl)
{
if (m_lpConPoint)
{
if (m_dwConPointID)
m_lpConPoint->Unadvise(m_dwConPointID);
m_lpConPoint->Release();
}
if (m_lpConCont)
m_lpConCont->Release();
m_lpO->Close(OLECLOSE_NOSAVE);
if (m_lpViewObjectEx)
m_lpViewObjectEx->Release();
if (m_lpViewObject)
m_lpViewObject->Release();
if (m_lpInPlaceObjWindowless)
m_lpInPlaceObjWindowless->Release();
if (m_lpInPlaceObj)
m_lpInPlaceObj->Release();
if (m_lpO)
m_lpO->Release();
m_lpControl->Release();
}
if (m_hdcBack)
::DeleteDC(m_hdcBack);
if (m_bmpBack)
::DeleteObject(m_bmpBack);
if (m_hdcBackW)
::DeleteDC(m_hdcBackW);
if (m_bmpBackW)
::DeleteObject(m_bmpBackW);
}
OLECONTAINER(BOOL)::Create(GUID clsid, DWORD dwExStyle, DWORD dwStyle, HWND hWndParent, HINSTANCE hInst)
{
m_hWndParent = hWndParent;
m_hInst = hInst;
m_CLSID = clsid;
m_bTransparent = dwExStyle & WS_EX_LAYERED;
m_bChild = dwStyle & WS_CHILD;
WNDCLASSEX wcs = {0};
wcs.cbSize = sizeof(WNDCLASSEX);
wcs.lpfnWndProc = COleContainerWnd<TObj>::WndProcStatic;
wcs.hInstance = hInst;
wcs.lpszClassName = "MyOleControl";
RegisterClassEx(&wcs);
RECT r;
if (m_bChild)
::GetClientRect(hWndParent, &r);
else
::GetWindowRect(hWndParent, &r);
m_hWnd = CreateWindowEx(dwExStyle,
"MyOleControl", "MyOleControlWindow",
dwStyle,
r.left, r.top, r.right-r.left, r.bottom-r.top, hWndParent, NULL, hInst, (void *)this);
::SetWindowPos(GetHWND(), HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
HRESULT hr;
hr = OleCreate(m_CLSID, IID_IOleObject, OLERENDER_DRAW,
0, (IOleClientSite *)this, (IStorage *)this, (void **)&m_lpO);
if (FAILED(hr))
{
if (hr == REGDB_E_CLASSNOTREG)
{
OnErrorClassNotReg();
}
return FALSE;
}
hr = OleSetContainedObject(m_lpO, TRUE);
if (FAILED(hr))
return FALSE;
hr = m_lpO->QueryInterface(__uuidof(TObj), (void **)&m_lpControl);
if (FAILED(hr))
return FALSE;
hr = m_lpO->QueryInterface(IID_IViewObjectEx, (void **)&m_lpViewObjectEx);
if (FAILED(hr))
{
m_lpViewObjectEx = NULL;
hr = m_lpO->QueryInterface(IID_IViewObject, (void **)&m_lpViewObject);
if (FAILED(hr))
return FALSE;
}
if (m_bTransparent)
{
hr = m_lpO->QueryInterface(IID_IOleInPlaceObjectWindowless, (void **)&m_lpInPlaceObjWindowless);
if (FAILED(hr))
{
hr = m_lpO->QueryInterface(IID_IOleInPlaceObject, (void **)&m_lpInPlaceObj);
if (FAILED(hr))
return FALSE;
m_bTransparent = FALSE;
}
}
else
{
hr = m_lpO->QueryInterface(IID_IOleInPlaceObject, (void **)&m_lpInPlaceObj);
if (FAILED(hr))
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -