You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.9 KiB
144 lines
4.9 KiB
14 years ago
|
// Stolen from: http://www.mvps.org/user32/webhost.cab
|
||
|
// No copyright notices, so I assume it's public domain -Colin
|
||
|
#include <windows.h>
|
||
|
#include "basewnd.h"
|
||
|
#include <shlobj.h>
|
||
|
#include <lmcons.h>
|
||
|
#include <exdisp.h>
|
||
|
|
||
|
#define NOTIMPLEMENTED __asm{ int 3 }; return E_NOTIMPL
|
||
|
|
||
|
|
||
|
struct CNullStorage
|
||
|
: public IStorage
|
||
|
{
|
||
|
// IUnknown
|
||
|
STDMETHODIMP QueryInterface(REFIID riid,void ** ppvObject);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
// IStorage
|
||
|
STDMETHODIMP CreateStream(const WCHAR * pwcsName,DWORD grfMode,DWORD reserved1,DWORD reserved2,IStream ** ppstm);
|
||
|
STDMETHODIMP OpenStream(const WCHAR * pwcsName,void * reserved1,DWORD grfMode,DWORD reserved2,IStream ** ppstm);
|
||
|
STDMETHODIMP CreateStorage(const WCHAR * pwcsName,DWORD grfMode,DWORD reserved1,DWORD reserved2,IStorage ** ppstg);
|
||
|
STDMETHODIMP OpenStorage(const WCHAR * pwcsName,IStorage * pstgPriority,DWORD grfMode,SNB snbExclude,DWORD reserved,IStorage ** ppstg);
|
||
|
STDMETHODIMP CopyTo(DWORD ciidExclude,IID const * rgiidExclude,SNB snbExclude,IStorage * pstgDest);
|
||
|
STDMETHODIMP MoveElementTo(const OLECHAR * pwcsName,IStorage * pstgDest,const OLECHAR* pwcsNewName,DWORD grfFlags);
|
||
|
STDMETHODIMP Commit(DWORD grfCommitFlags);
|
||
|
STDMETHODIMP Revert(void);
|
||
|
STDMETHODIMP EnumElements(DWORD reserved1,void * reserved2,DWORD reserved3,IEnumSTATSTG ** ppenum);
|
||
|
STDMETHODIMP DestroyElement(const OLECHAR * pwcsName);
|
||
|
STDMETHODIMP RenameElement(const WCHAR * pwcsOldName,const WCHAR * pwcsNewName);
|
||
|
STDMETHODIMP SetElementTimes(const WCHAR * pwcsName,FILETIME const * pctime,FILETIME const * patime,FILETIME const * pmtime);
|
||
|
STDMETHODIMP SetClass(REFCLSID clsid);
|
||
|
STDMETHODIMP SetStateBits(DWORD grfStateBits,DWORD grfMask);
|
||
|
STDMETHODIMP Stat(STATSTG * pstatstg,DWORD grfStatFlag);
|
||
|
};
|
||
|
|
||
|
struct webhostwnd;
|
||
|
|
||
|
|
||
|
struct CMyFrame
|
||
|
: public IOleInPlaceFrame
|
||
|
{
|
||
|
webhostwnd* host;
|
||
|
// IUnknown
|
||
|
STDMETHODIMP QueryInterface(REFIID riid,void ** ppvObject);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
// IOleWindow
|
||
|
STDMETHODIMP GetWindow(HWND FAR* lphwnd);
|
||
|
STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode);
|
||
|
// IOleInPlaceUIWindow
|
||
|
STDMETHODIMP GetBorder(LPRECT lprectBorder);
|
||
|
STDMETHODIMP RequestBorderSpace(LPCBORDERWIDTHS pborderwidths);
|
||
|
STDMETHODIMP SetBorderSpace(LPCBORDERWIDTHS pborderwidths);
|
||
|
STDMETHODIMP SetActiveObject(IOleInPlaceActiveObject *pActiveObject,LPCOLESTR pszObjName);
|
||
|
// IOleInPlaceFrame
|
||
|
STDMETHODIMP InsertMenus(HMENU hmenuShared,LPOLEMENUGROUPWIDTHS lpMenuWidths);
|
||
|
STDMETHODIMP SetMenu(HMENU hmenuShared,HOLEMENU holemenu,HWND hwndActiveObject);
|
||
|
STDMETHODIMP RemoveMenus(HMENU hmenuShared);
|
||
|
STDMETHODIMP SetStatusText(LPCOLESTR pszStatusText);
|
||
|
STDMETHODIMP EnableModeless(BOOL fEnable);
|
||
|
STDMETHODIMP TranslateAccelerator( LPMSG lpmsg,WORD wID);
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
struct CMySite
|
||
|
: public IOleClientSite,
|
||
|
public IOleInPlaceSite
|
||
|
{
|
||
|
webhostwnd* host;
|
||
|
|
||
|
// IUnknown
|
||
|
STDMETHODIMP QueryInterface(REFIID riid,void ** ppvObject);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
// IOleClientSite
|
||
|
STDMETHODIMP SaveObject();
|
||
|
STDMETHODIMP GetMoniker(DWORD dwAssign,DWORD dwWhichMoniker,IMoniker ** ppmk);
|
||
|
STDMETHODIMP GetContainer(LPOLECONTAINER FAR* ppContainer);
|
||
|
STDMETHODIMP ShowObject();
|
||
|
STDMETHODIMP OnShowWindow(BOOL fShow);
|
||
|
STDMETHODIMP RequestNewObjectLayout();
|
||
|
// IOleWindow
|
||
|
STDMETHODIMP GetWindow(HWND FAR* lphwnd);
|
||
|
STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode);
|
||
|
// IOleInPlaceSite methods
|
||
|
STDMETHODIMP CanInPlaceActivate();
|
||
|
STDMETHODIMP OnInPlaceActivate();
|
||
|
STDMETHODIMP OnUIActivate();
|
||
|
STDMETHODIMP GetWindowContext(LPOLEINPLACEFRAME FAR* lplpFrame,LPOLEINPLACEUIWINDOW FAR* lplpDoc,LPRECT lprcPosRect,LPRECT lprcClipRect,LPOLEINPLACEFRAMEINFO lpFrameInfo);
|
||
|
STDMETHODIMP Scroll(SIZE scrollExtent);
|
||
|
STDMETHODIMP OnUIDeactivate(BOOL fUndoable);
|
||
|
STDMETHODIMP OnInPlaceDeactivate();
|
||
|
STDMETHODIMP DiscardUndoState();
|
||
|
STDMETHODIMP DeactivateAndUndo();
|
||
|
STDMETHODIMP OnPosRectChange(LPCRECT lprcPosRect);
|
||
|
};
|
||
|
|
||
|
|
||
|
struct CMyContainer
|
||
|
: public IOleContainer
|
||
|
{
|
||
|
// IUnknown
|
||
|
STDMETHODIMP QueryInterface(REFIID riid,void ** ppvObject);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
// IParseDisplayName
|
||
|
STDMETHODIMP ParseDisplayName(IBindCtx *pbc,LPOLESTR pszDisplayName,ULONG *pchEaten,IMoniker **ppmkOut);
|
||
|
// IOleContainer
|
||
|
STDMETHODIMP EnumObjects(DWORD grfFlags,IEnumUnknown **ppenum);
|
||
|
STDMETHODIMP LockContainer(BOOL fLock);
|
||
|
};
|
||
|
|
||
|
|
||
|
struct webhostwnd : public basewnd
|
||
|
{
|
||
|
webhostwnd();
|
||
|
~webhostwnd();
|
||
|
|
||
|
static webhostwnd* Create(HWND hParent, RECT& rect);
|
||
|
|
||
|
virtual BOOL HandleMessage(UINT,WPARAM,LPARAM,LRESULT*);
|
||
|
|
||
|
void CreateEmbeddedWebControl(void);
|
||
|
void UnCreateEmbeddedWebControl(void);
|
||
|
|
||
|
HWND operator =(webhostwnd* rhs);
|
||
|
|
||
|
CNullStorage storage;
|
||
|
CMySite site;
|
||
|
CMyFrame frame;
|
||
|
|
||
|
IOleObject* mpWebObject;
|
||
|
|
||
|
void OnPaint(HDC hdc);
|
||
|
void GoToPage(const char* address);
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|