📄 oleobject.c
字号:
FIXME("(%p)->(%ld)\n", This, dwConnection);
return E_NOTIMPL;
}
static HRESULT WINAPI OleObject_EnumAdvise(IOleObject *iface, IEnumSTATDATA **ppenumAdvise)
{
WebBrowser *This = OLEOBJ_THIS(iface);
FIXME("(%p)->(%p)\n", This, ppenumAdvise);
return S_OK;
}
static HRESULT WINAPI OleObject_GetMiscStatus(IOleObject *iface, DWORD dwAspect, DWORD *pdwStatus)
{
WebBrowser *This = OLEOBJ_THIS(iface);
HRESULT hres;
TRACE("(%p)->(%lx, %p)\n", This, dwAspect, pdwStatus);
hres = OleRegGetMiscStatus(&CLSID_WebBrowser, dwAspect, pdwStatus);
if (FAILED(hres))
*pdwStatus = 0;
return S_OK;
}
static HRESULT WINAPI OleObject_SetColorScheme(IOleObject *iface, LOGPALETTE* pLogpal)
{
WebBrowser *This = OLEOBJ_THIS(iface);
FIXME("(%p)->(%p)\n", This, pLogpal);
return E_NOTIMPL;
}
#undef OLEOBJ_THIS
static const IOleObjectVtbl OleObjectVtbl =
{
OleObject_QueryInterface,
OleObject_AddRef,
OleObject_Release,
OleObject_SetClientSite,
OleObject_GetClientSite,
OleObject_SetHostNames,
OleObject_Close,
OleObject_SetMoniker,
OleObject_GetMoniker,
OleObject_InitFromData,
OleObject_GetClipboardData,
OleObject_DoVerb,
OleObject_EnumVerbs,
OleObject_Update,
OleObject_IsUpToDate,
OleObject_GetUserClassID,
OleObject_GetUserType,
OleObject_SetExtent,
OleObject_GetExtent,
OleObject_Advise,
OleObject_Unadvise,
OleObject_EnumAdvise,
OleObject_GetMiscStatus,
OleObject_SetColorScheme
};
/**********************************************************************
* Implement the IOleInPlaceObject interface
*/
#define INPLACEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleInPlaceObject, iface)
static HRESULT WINAPI OleInPlaceObject_QueryInterface(IOleInPlaceObject *iface,
REFIID riid, LPVOID *ppobj)
{
WebBrowser *This = INPLACEOBJ_THIS(iface);
return IWebBrowser_QueryInterface(WEBBROWSER(This), riid, ppobj);
}
static ULONG WINAPI OleInPlaceObject_AddRef(IOleInPlaceObject *iface)
{
WebBrowser *This = INPLACEOBJ_THIS(iface);
return IWebBrowser_AddRef(WEBBROWSER(This));
}
static ULONG WINAPI OleInPlaceObject_Release(IOleInPlaceObject *iface)
{
WebBrowser *This = INPLACEOBJ_THIS(iface);
return IWebBrowser_Release(WEBBROWSER(This));
}
static HRESULT WINAPI OleInPlaceObject_GetWindow(IOleInPlaceObject *iface, HWND* phwnd)
{
WebBrowser *This = INPLACEOBJ_THIS(iface);
FIXME("(%p)->(%p)\n", This, phwnd);
#if 0
/* Create a fake window to fool MFC into believing that we actually
* have an implemented browser control. Avoids the assertion.
*/
HWND hwnd;
hwnd = CreateWindowA("BUTTON", "Web Control",
WS_HSCROLL | WS_VSCROLL | WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 600,
400, NULL, NULL, NULL, NULL);
*phwnd = hwnd;
TRACE ("Returning hwnd = %d\n", hwnd);
#endif
return S_OK;
}
static HRESULT WINAPI OleInPlaceObject_ContextSensitiveHelp(IOleInPlaceObject *iface,
BOOL fEnterMode)
{
WebBrowser *This = INPLACEOBJ_THIS(iface);
FIXME("(%p)->(%x)\n", This, fEnterMode);
return E_NOTIMPL;
}
static HRESULT WINAPI OleInPlaceObject_InPlaceDeactivate(IOleInPlaceObject *iface)
{
WebBrowser *This = INPLACEOBJ_THIS(iface);
FIXME("(%p)\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI OleInPlaceObject_UIDeactivate(IOleInPlaceObject *iface)
{
WebBrowser *This = INPLACEOBJ_THIS(iface);
FIXME("(%p)\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI OleInPlaceObject_SetObjectRects(IOleInPlaceObject *iface,
LPCRECT lprcPosRect, LPCRECT lprcClipRect)
{
WebBrowser *This = INPLACEOBJ_THIS(iface);
TRACE("(%p)->(%p %p)\n", This, lprcPosRect, lprcClipRect);
if(This->shell_embedding_hwnd) {
SetWindowPos(This->shell_embedding_hwnd, NULL,
lprcPosRect->left, lprcPosRect->top,
lprcPosRect->right-lprcPosRect->left,
lprcPosRect->bottom-lprcPosRect->top,
SWP_NOZORDER | SWP_NOACTIVATE);
}
return S_OK;
}
static HRESULT WINAPI OleInPlaceObject_ReactivateAndUndo(IOleInPlaceObject *iface)
{
WebBrowser *This = INPLACEOBJ_THIS(iface);
FIXME("(%p)\n", This);
return E_NOTIMPL;
}
#undef INPLACEOBJ_THIS
static const IOleInPlaceObjectVtbl OleInPlaceObjectVtbl =
{
OleInPlaceObject_QueryInterface,
OleInPlaceObject_AddRef,
OleInPlaceObject_Release,
OleInPlaceObject_GetWindow,
OleInPlaceObject_ContextSensitiveHelp,
OleInPlaceObject_InPlaceDeactivate,
OleInPlaceObject_UIDeactivate,
OleInPlaceObject_SetObjectRects,
OleInPlaceObject_ReactivateAndUndo
};
/**********************************************************************
* Implement the IOleControl interface
*/
#define CONTROL_THIS(iface) DEFINE_THIS(WebBrowser, OleControl, iface)
static HRESULT WINAPI OleControl_QueryInterface(IOleControl *iface,
REFIID riid, LPVOID *ppobj)
{
WebBrowser *This = CONTROL_THIS(iface);
return IWebBrowser_QueryInterface(WEBBROWSER(This), riid, ppobj);
}
static ULONG WINAPI OleControl_AddRef(IOleControl *iface)
{
WebBrowser *This = CONTROL_THIS(iface);
return IWebBrowser_AddRef(WEBBROWSER(This));
}
static ULONG WINAPI OleControl_Release(IOleControl *iface)
{
WebBrowser *This = CONTROL_THIS(iface);
return IWebBrowser_Release(WEBBROWSER(This));
}
static HRESULT WINAPI OleControl_GetControlInfo(IOleControl *iface, LPCONTROLINFO pCI)
{
WebBrowser *This = CONTROL_THIS(iface);
FIXME("(%p)->(%p)\n", This, pCI);
return E_NOTIMPL;
}
static HRESULT WINAPI OleControl_OnMnemonic(IOleControl *iface, struct tagMSG *pMsg)
{
WebBrowser *This = CONTROL_THIS(iface);
FIXME("(%p)->(%p)\n", This, pMsg);
return E_NOTIMPL;
}
static HRESULT WINAPI OleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispID)
{
WebBrowser *This = CONTROL_THIS(iface);
FIXME("(%p)->(%ld)\n", This, dispID);
return E_NOTIMPL;
}
static HRESULT WINAPI OleControl_FreezeEvents(IOleControl *iface, BOOL bFreeze)
{
WebBrowser *This = CONTROL_THIS(iface);
FIXME("(%p)->(%x)\n", This, bFreeze);
return E_NOTIMPL;
}
#undef CONTROL_THIS
static const IOleControlVtbl OleControlVtbl =
{
OleControl_QueryInterface,
OleControl_AddRef,
OleControl_Release,
OleControl_GetControlInfo,
OleControl_OnMnemonic,
OleControl_OnAmbientPropertyChange,
OleControl_FreezeEvents
};
#define ACTIVEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleInPlaceActiveObject, iface)
static HRESULT WINAPI InPlaceActiveObject_QueryInterface(IOleInPlaceActiveObject *iface,
REFIID riid, void **ppv)
{
WebBrowser *This = ACTIVEOBJ_THIS(iface);
return IWebBrowser2_QueryInterface(WEBBROWSER2(This), riid, ppv);
}
static ULONG WINAPI InPlaceActiveObject_AddRef(IOleInPlaceActiveObject *iface)
{
WebBrowser *This = ACTIVEOBJ_THIS(iface);
return IWebBrowser2_AddRef(WEBBROWSER2(This));
}
static ULONG WINAPI InPlaceActiveObject_Release(IOleInPlaceActiveObject *iface)
{
WebBrowser *This = ACTIVEOBJ_THIS(iface);
return IWebBrowser2_Release(WEBBROWSER2(This));
}
static HRESULT WINAPI InPlaceActiveObject_GetWindow(IOleInPlaceActiveObject *iface,
HWND *phwnd)
{
WebBrowser *This = ACTIVEOBJ_THIS(iface);
return IOleInPlaceObject_GetWindow(INPLACEOBJ(This), phwnd);
}
static HRESULT WINAPI InPlaceActiveObject_ContextSensitiveHelp(IOleInPlaceActiveObject *iface,
BOOL fEnterMode)
{
WebBrowser *This = ACTIVEOBJ_THIS(iface);
return IOleInPlaceObject_ContextSensitiveHelp(INPLACEOBJ(This), fEnterMode);
}
static HRESULT WINAPI InPlaceActiveObject_TranslateAccelerator(IOleInPlaceActiveObject *iface,
LPMSG lpmsg)
{
WebBrowser *This = ACTIVEOBJ_THIS(iface);
FIXME("(%p)->(%p)\n", This, lpmsg);
return E_NOTIMPL;
}
static HRESULT WINAPI InPlaceActiveObject_OnFrameWindowActivate(IOleInPlaceActiveObject *iface,
BOOL fActivate)
{
WebBrowser *This = ACTIVEOBJ_THIS(iface);
FIXME("(%p)->(%x)\n", This, fActivate);
return E_NOTIMPL;
}
static HRESULT WINAPI InPlaceActiveObject_OnDocWindowActivate(IOleInPlaceActiveObject *iface,
BOOL fActivate)
{
WebBrowser *This = ACTIVEOBJ_THIS(iface);
FIXME("(%p)->(%x)\n", This, fActivate);
return E_NOTIMPL;
}
static HRESULT WINAPI InPlaceActiveObject_ResizeBorder(IOleInPlaceActiveObject *iface,
LPCRECT lprcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fFrameWindow)
{
WebBrowser *This = ACTIVEOBJ_THIS(iface);
FIXME("(%p)->(%p %p %x)\n", This, lprcBorder, pUIWindow, fFrameWindow);
return E_NOTIMPL;
}
static HRESULT WINAPI InPlaceActiveObject_EnableModeless(IOleInPlaceActiveObject *iface,
BOOL fEnable)
{
WebBrowser *This = ACTIVEOBJ_THIS(iface);
FIXME("(%p)->(%x)\n", This, fEnable);
return E_NOTIMPL;
}
#undef ACTIVEOBJ_THIS
static const IOleInPlaceActiveObjectVtbl OleInPlaceActiveObjectVtbl = {
InPlaceActiveObject_QueryInterface,
InPlaceActiveObject_AddRef,
InPlaceActiveObject_Release,
InPlaceActiveObject_GetWindow,
InPlaceActiveObject_ContextSensitiveHelp,
InPlaceActiveObject_TranslateAccelerator,
InPlaceActiveObject_OnFrameWindowActivate,
InPlaceActiveObject_OnDocWindowActivate,
InPlaceActiveObject_ResizeBorder,
InPlaceActiveObject_EnableModeless
};
void WebBrowser_OleObject_Init(WebBrowser *This)
{
This->lpOleObjectVtbl = &OleObjectVtbl;
This->lpOleInPlaceObjectVtbl = &OleInPlaceObjectVtbl;
This->lpOleControlVtbl = &OleControlVtbl;
This->lpOleInPlaceActiveObjectVtbl = &OleInPlaceActiveObjectVtbl;
This->client = NULL;
This->container = NULL;
This->iphwnd = NULL;
This->frame_hwnd = NULL;
This->frame = NULL;
This->uiwindow = NULL;
This->shell_embedding_hwnd = NULL;
memset(&This->pos_rect, 0, sizeof(RECT));
memset(&This->clip_rect, 0, sizeof(RECT));
memset(&This->frameinfo, 0, sizeof(OLEINPLACEFRAMEINFO));
}
void WebBrowser_OleObject_Destroy(WebBrowser *This)
{
if(This->client)
IOleObject_SetClientSite(OLEOBJ(This), NULL);
if(This->container)
IOleContainer_Release(This->container);
if(This->frame)
IOleInPlaceFrame_Release(This->frame);
if(This->uiwindow)
IOleInPlaceUIWindow_Release(This->uiwindow);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -