Display a Web Page in a Plain C Win32 Application?是一篇好文章
Transparent Flash Control in Plain C++?也是一篇好文章
為了把WebBrowser畫在窗體上
兩個工程對比了下
對比
Flash
的接口
?
IOleClientSite
IOleInPlaceSiteWindowless
IOleInPlaceFrame
IStorage
?
IOleClientSite
IOleInPlaceFrame
IDocHostUIHandler
// IOleInPlaceSite
// IOleClientSite
---------------------------------------
So?
IOleInPlaceFrame
IOleClientSite
IDocHostUIHandler
IOleInPlaceSiteWindowless
IOleClientSite
?
嘗試方案
Flash WindowLess
用法
// IOleInPlaceSiteWindowless interface
virtual HRESULT STDMETHODCALLTYPE CanWindowlessActivate(void);
????????? return S_OK;
virtual HRESULT STDMETHODCALLTYPE GetCapture(void);
????????? return S_FALSE;
virtual HRESULT STDMETHODCALLTYPE SetCapture(/* [in] */ BOOL fCapture);
????????? return S_FALSE;
virtual HRESULT STDMETHODCALLTYPE GetFocus(void);
????????? return S_OK;
virtual HRESULT STDMETHODCALLTYPE SetFocus(/* [in] */ BOOL fFocus);
????????? return S_OK;
virtual HRESULT STDMETHODCALLTYPE GetDC(/* [in] */ LPCRECT pRect,
/* [in] */ DWORD grfFlags,
/* [out] */ HDC __RPC_FAR *phDC);
????????? return S_FALSE;
virtual HRESULT STDMETHODCALLTYPE ReleaseDC(/* [in] */ HDC hDC);
????????? return S_FALSE;
virtual HRESULT STDMETHODCALLTYPE InvalidateRect(/* [in] */ LPCRECT pRect,
/* [in] */ BOOL fErase);
virtual HRESULT STDMETHODCALLTYPE InvalidateRgn(/* [in] */ HRGN hRGN,
/* [in] */ BOOL fErase);
return S_OK;
virtual HRESULT STDMETHODCALLTYPE ScrollRect(/* [in] */ INT dx,
/* [in] */ INT dy,
/* [in] */ LPCRECT pRectScroll,
/* [in] */ LPCRECT pRectClip);
NOTIMPLEMENTED
virtual HRESULT STDMETHODCALLTYPE AdjustRect(/* [out][in] */ LPRECT prc);
return S_FALSE;
virtual HRESULT STDMETHODCALLTYPE OnDefWindowMessage(/* [in] */ UINT msg,
/* [in] */ WPARAM wParam,
/* [in] */ LPARAM lParam,
/* [out] */ LRESULT __RPC_FAR *plResult);
return S_FALSE;
如何獲取
IID_IViewObjectEx?
只能獲取
IID_IViewObject
?
Q5:
研究
Flash
這兩個
Object
如何獲得?
???
IViewObjectEx
*
m_lpViewObject
;
???
IViewObjectEx
*
m_lpViewObjectEx
;
?
???
在
Flash
的代碼中有以下的特殊處理
???
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
;
??? }
?
????
實驗后,發(fā)現(xiàn)
???? IOleInPlaceSiteWindowless::InvalidateRect()
根本沒有響應(yīng)到
在
Flash
的基礎(chǔ)上修改