2 * Implementation of IOleObject interfaces for WebBrowser control
8 * Copyright 2001 John R. Sheets (for CodeWeavers)
9 * Copyright 2005 Jacek Caban
11 * This library is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public
13 * License as published by the Free Software Foundation; either
14 * version 2.1 of the License, or (at your option) any later version.
16 * This library is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with this library; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 #include "wine/debug.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw
);
32 static ATOM shell_embedding_atom
= 0;
34 static LRESULT
resize_window(WebBrowser
*This
, LONG width
, LONG height
)
36 if(This
->doc_view_hwnd
)
37 SetWindowPos(This
->doc_view_hwnd
, NULL
, 0, 0, width
, height
,
38 SWP_NOZORDER
| SWP_NOACTIVATE
);
43 static LRESULT WINAPI
shell_embedding_proc(HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
47 static const WCHAR wszTHIS
[] = {'T','H','I','S',0};
49 if(msg
== WM_CREATE
) {
50 This
= *(WebBrowser
**)lParam
;
51 SetPropW(hwnd
, wszTHIS
, This
);
53 This
= GetPropW(hwnd
, wszTHIS
);
58 return resize_window(This
, LOWORD(lParam
), HIWORD(lParam
));
61 return DefWindowProcA(hwnd
, msg
, wParam
, lParam
);
64 static void create_shell_embedding_hwnd(WebBrowser
*This
)
66 IOleInPlaceSite
*inplace
;
70 static const WCHAR wszShellEmbedding
[] =
71 {'S','h','e','l','l',' ','E','m','b','e','d','d','i','n','g',0};
73 if(!shell_embedding_atom
) {
74 static WNDCLASSEXW wndclass
= {
78 0, 0 /* native uses 8 */, NULL
, NULL
, NULL
,
79 (HBRUSH
)COLOR_WINDOWFRAME
, NULL
,
83 wndclass
.hInstance
= shdocvw_hinstance
;
85 RegisterClassExW(&wndclass
);
88 hres
= IOleClientSite_QueryInterface(This
->client
, &IID_IOleInPlaceSite
, (void**)&inplace
);
90 IOleInPlaceSite_GetWindow(inplace
, &parent
);
91 IOleInPlaceSite_Release(inplace
);
94 This
->shell_embedding_hwnd
= CreateWindowExW(0, wszShellEmbedding
, wszShellEmbedding
,
95 WS_CHILD
| WS_CLIPSIBLINGS
| WS_CLIPCHILDREN
| WS_TABSTOP
| WS_MAXIMIZEBOX
,
97 NULL
, shdocvw_hinstance
, This
);
100 /**********************************************************************
101 * Implement the IOleObject interface for the WebBrowser control
104 #define OLEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleObject, iface)
106 static HRESULT WINAPI
OleObject_QueryInterface(IOleObject
*iface
, REFIID riid
, void **ppv
)
108 WebBrowser
*This
= OLEOBJ_THIS(iface
);
109 return IWebBrowser_QueryInterface(WEBBROWSER(This
), riid
, ppv
);
112 static ULONG WINAPI
OleObject_AddRef(IOleObject
*iface
)
114 WebBrowser
*This
= OLEOBJ_THIS(iface
);
115 return IWebBrowser_AddRef(WEBBROWSER(This
));
118 static ULONG WINAPI
OleObject_Release(IOleObject
*iface
)
120 WebBrowser
*This
= OLEOBJ_THIS(iface
);
121 return IWebBrowser_Release(WEBBROWSER(This
));
124 static HRESULT WINAPI
OleObject_SetClientSite(IOleObject
*iface
, LPOLECLIENTSITE pClientSite
)
126 WebBrowser
*This
= OLEOBJ_THIS(iface
);
128 TRACE("(%p)->(%p)\n", This
, pClientSite
);
130 if(This
->client
== pClientSite
)
133 if(This
->doc_view_hwnd
)
134 DestroyWindow(This
->doc_view_hwnd
);
135 if(This
->shell_embedding_hwnd
)
136 DestroyWindow(This
->shell_embedding_hwnd
);
139 IOleClientSite_Release(This
->client
);
141 This
->client
= pClientSite
;
145 IOleClientSite_AddRef(pClientSite
);
147 create_shell_embedding_hwnd(This
);
152 static HRESULT WINAPI
OleObject_GetClientSite(IOleObject
*iface
, LPOLECLIENTSITE
*ppClientSite
)
154 WebBrowser
*This
= OLEOBJ_THIS(iface
);
156 TRACE("(%p)->(%p)\n", This
, ppClientSite
);
162 IOleClientSite_AddRef(This
->client
);
163 *ppClientSite
= This
->client
;
168 static HRESULT WINAPI
OleObject_SetHostNames(IOleObject
*iface
, LPCOLESTR szContainerApp
,
169 LPCOLESTR szContainerObj
)
171 WebBrowser
*This
= OLEOBJ_THIS(iface
);
172 FIXME("(%p)->(%s, %s)\n", This
, debugstr_w(szContainerApp
), debugstr_w(szContainerObj
));
176 static HRESULT WINAPI
OleObject_Close(IOleObject
*iface
, DWORD dwSaveOption
)
178 WebBrowser
*This
= OLEOBJ_THIS(iface
);
179 FIXME("(%p)->(%ld)\n", This
, dwSaveOption
);
183 static HRESULT WINAPI
OleObject_SetMoniker(IOleObject
*iface
, DWORD dwWhichMoniker
, IMoniker
* pmk
)
185 WebBrowser
*This
= OLEOBJ_THIS(iface
);
186 FIXME("(%p)->(%ld, %p)\n", This
, dwWhichMoniker
, pmk
);
190 static HRESULT WINAPI
OleObject_GetMoniker(IOleObject
*iface
, DWORD dwAssign
,
191 DWORD dwWhichMoniker
, LPMONIKER
*ppmk
)
193 WebBrowser
*This
= OLEOBJ_THIS(iface
);
194 FIXME("(%p)->(%ld, %ld, %p)\n", This
, dwAssign
, dwWhichMoniker
, ppmk
);
198 static HRESULT WINAPI
OleObject_InitFromData(IOleObject
*iface
, LPDATAOBJECT pDataObject
,
199 BOOL fCreation
, DWORD dwReserved
)
201 WebBrowser
*This
= OLEOBJ_THIS(iface
);
202 FIXME("(%p)->(%p, %d, %ld)\n", This
, pDataObject
, fCreation
, dwReserved
);
206 static HRESULT WINAPI
OleObject_GetClipboardData(IOleObject
*iface
, DWORD dwReserved
,
207 LPDATAOBJECT
*ppDataObject
)
209 WebBrowser
*This
= OLEOBJ_THIS(iface
);
210 FIXME("(%p)->(%ld, %p)\n", This
, dwReserved
, ppDataObject
);
214 static HRESULT WINAPI
OleObject_DoVerb(IOleObject
*iface
, LONG iVerb
, struct tagMSG
* lpmsg
,
215 LPOLECLIENTSITE pActiveSite
, LONG lindex
, HWND hwndParent
, LPCRECT lprcPosRect
)
217 WebBrowser
*This
= OLEOBJ_THIS(iface
);
220 static const WCHAR wszitem
[] = {'i','t','e','m',0};
222 TRACE("(%p)->(%ld %p %p %ld %p %p)\n", This
, iVerb
, lpmsg
, pActiveSite
, lindex
, hwndParent
,
228 case OLEIVERB_INPLACEACTIVATE
: {
229 IOleInPlaceSite
*inplace
;
231 TRACE("OLEIVERB_INPLACEACTIVATE\n");
236 hres
= IOleClientSite_QueryInterface(pActiveSite
, &IID_IOleInPlaceSite
, (void**)&inplace
);
238 WARN("Could not get IOleInPlaceSite\n");
242 hres
= IOleInPlaceSite_CanInPlaceActivate(inplace
);
244 WARN("CanInPlaceActivate returned: %08lx\n", hres
);
245 IOleInPlaceSite_Release(inplace
);
249 hres
= IOleInPlaceSite_GetWindow(inplace
, &This
->iphwnd
);
251 This
->iphwnd
= hwndParent
;
253 IOleInPlaceSite_OnInPlaceActivate(inplace
);
255 IOleInPlaceSite_GetWindowContext(inplace
, &This
->frame
, &This
->uiwindow
,
256 &This
->pos_rect
, &This
->clip_rect
,
260 if(iVerb
== OLEIVERB_INPLACEACTIVATE
)
261 IOleInPlaceSite_Release(inplace
);
263 SetWindowPos(This
->shell_embedding_hwnd
, NULL
,
264 This
->pos_rect
.left
, This
->pos_rect
.top
,
265 This
->pos_rect
.right
-This
->pos_rect
.left
,
266 This
->pos_rect
.bottom
-This
->pos_rect
.top
,
267 SWP_NOZORDER
| SWP_SHOWWINDOW
);
270 IOleClientSite_ShowObject(This
->client
);
271 IOleClientSite_GetContainer(This
->client
, &This
->container
);
275 IOleInPlaceFrame_GetWindow(This
->frame
, &This
->frame_hwnd
);
277 if(iVerb
== OLEIVERB_INPLACEACTIVATE
)
280 TRACE("OLEIVERB_SHOW\n");
282 IOleInPlaceSite_OnUIActivate(inplace
);
283 IOleInPlaceSite_Release(inplace
);
285 IOleInPlaceFrame_SetActiveObject(This
->frame
, ACTIVEOBJ(This
), wszitem
);
288 * IOleInPlaceFrmae_SetMenu
294 FIXME("stub for %ld\n", iVerb
);
301 static HRESULT WINAPI
OleObject_EnumVerbs(IOleObject
*iface
, IEnumOLEVERB
**ppEnumOleVerb
)
303 WebBrowser
*This
= OLEOBJ_THIS(iface
);
304 TRACE("(%p)->(%p)\n", This
, ppEnumOleVerb
);
305 return OleRegEnumVerbs(&CLSID_WebBrowser
, ppEnumOleVerb
);
308 static HRESULT WINAPI
OleObject_Update(IOleObject
*iface
)
310 WebBrowser
*This
= OLEOBJ_THIS(iface
);
311 FIXME("(%p)\n", This
);
315 static HRESULT WINAPI
OleObject_IsUpToDate(IOleObject
*iface
)
317 WebBrowser
*This
= OLEOBJ_THIS(iface
);
318 FIXME("(%p)\n", This
);
322 static HRESULT WINAPI
OleObject_GetUserClassID(IOleObject
*iface
, CLSID
* pClsid
)
324 WebBrowser
*This
= OLEOBJ_THIS(iface
);
325 FIXME("(%p)->(%p)\n", This
, pClsid
);
329 static HRESULT WINAPI
OleObject_GetUserType(IOleObject
*iface
, DWORD dwFormOfType
,
330 LPOLESTR
* pszUserType
)
332 WebBrowser
*This
= OLEOBJ_THIS(iface
);
333 TRACE("(%p, %ld, %p)\n", This
, dwFormOfType
, pszUserType
);
334 return OleRegGetUserType(&CLSID_WebBrowser
, dwFormOfType
, pszUserType
);
337 static HRESULT WINAPI
OleObject_SetExtent(IOleObject
*iface
, DWORD dwDrawAspect
, SIZEL
*psizel
)
339 WebBrowser
*This
= OLEOBJ_THIS(iface
);
340 FIXME("(%p)->(%lx %p)\n", This
, dwDrawAspect
, psizel
);
344 static HRESULT WINAPI
OleObject_GetExtent(IOleObject
*iface
, DWORD dwDrawAspect
, SIZEL
*psizel
)
346 WebBrowser
*This
= OLEOBJ_THIS(iface
);
347 FIXME("(%p)->(%lx, %p)\n", This
, dwDrawAspect
, psizel
);
351 static HRESULT WINAPI
OleObject_Advise(IOleObject
*iface
, IAdviseSink
*pAdvSink
,
352 DWORD
* pdwConnection
)
354 WebBrowser
*This
= OLEOBJ_THIS(iface
);
355 FIXME("(%p)->(%p, %p)\n", This
, pAdvSink
, pdwConnection
);
359 static HRESULT WINAPI
OleObject_Unadvise(IOleObject
*iface
, DWORD dwConnection
)
361 WebBrowser
*This
= OLEOBJ_THIS(iface
);
362 FIXME("(%p)->(%ld)\n", This
, dwConnection
);
366 static HRESULT WINAPI
OleObject_EnumAdvise(IOleObject
*iface
, IEnumSTATDATA
**ppenumAdvise
)
368 WebBrowser
*This
= OLEOBJ_THIS(iface
);
369 FIXME("(%p)->(%p)\n", This
, ppenumAdvise
);
373 static HRESULT WINAPI
OleObject_GetMiscStatus(IOleObject
*iface
, DWORD dwAspect
, DWORD
*pdwStatus
)
375 WebBrowser
*This
= OLEOBJ_THIS(iface
);
378 TRACE("(%p)->(%lx, %p)\n", This
, dwAspect
, pdwStatus
);
380 hres
= OleRegGetMiscStatus(&CLSID_WebBrowser
, dwAspect
, pdwStatus
);
388 static HRESULT WINAPI
OleObject_SetColorScheme(IOleObject
*iface
, LOGPALETTE
* pLogpal
)
390 WebBrowser
*This
= OLEOBJ_THIS(iface
);
391 FIXME("(%p)->(%p)\n", This
, pLogpal
);
397 static const IOleObjectVtbl OleObjectVtbl
=
399 OleObject_QueryInterface
,
402 OleObject_SetClientSite
,
403 OleObject_GetClientSite
,
404 OleObject_SetHostNames
,
406 OleObject_SetMoniker
,
407 OleObject_GetMoniker
,
408 OleObject_InitFromData
,
409 OleObject_GetClipboardData
,
413 OleObject_IsUpToDate
,
414 OleObject_GetUserClassID
,
415 OleObject_GetUserType
,
420 OleObject_EnumAdvise
,
421 OleObject_GetMiscStatus
,
422 OleObject_SetColorScheme
425 /**********************************************************************
426 * Implement the IOleInPlaceObject interface
429 #define INPLACEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleInPlaceObject, iface)
431 static HRESULT WINAPI
OleInPlaceObject_QueryInterface(IOleInPlaceObject
*iface
,
432 REFIID riid
, LPVOID
*ppobj
)
434 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
435 return IWebBrowser_QueryInterface(WEBBROWSER(This
), riid
, ppobj
);
438 static ULONG WINAPI
OleInPlaceObject_AddRef(IOleInPlaceObject
*iface
)
440 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
441 return IWebBrowser_AddRef(WEBBROWSER(This
));
444 static ULONG WINAPI
OleInPlaceObject_Release(IOleInPlaceObject
*iface
)
446 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
447 return IWebBrowser_Release(WEBBROWSER(This
));
450 static HRESULT WINAPI
OleInPlaceObject_GetWindow(IOleInPlaceObject
*iface
, HWND
* phwnd
)
452 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
454 FIXME("(%p)->(%p)\n", This
, phwnd
);
457 /* Create a fake window to fool MFC into believing that we actually
458 * have an implemented browser control. Avoids the assertion.
461 hwnd
= CreateWindowA("BUTTON", "Web Control",
462 WS_HSCROLL
| WS_VSCROLL
| WS_OVERLAPPEDWINDOW
,
463 CW_USEDEFAULT
, CW_USEDEFAULT
, 600,
464 400, NULL
, NULL
, NULL
, NULL
);
467 TRACE ("Returning hwnd = %d\n", hwnd
);
473 static HRESULT WINAPI
OleInPlaceObject_ContextSensitiveHelp(IOleInPlaceObject
*iface
,
476 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
477 FIXME("(%p)->(%x)\n", This
, fEnterMode
);
481 static HRESULT WINAPI
OleInPlaceObject_InPlaceDeactivate(IOleInPlaceObject
*iface
)
483 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
484 FIXME("(%p)\n", This
);
488 static HRESULT WINAPI
OleInPlaceObject_UIDeactivate(IOleInPlaceObject
*iface
)
490 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
491 FIXME("(%p)\n", This
);
495 static HRESULT WINAPI
OleInPlaceObject_SetObjectRects(IOleInPlaceObject
*iface
,
496 LPCRECT lprcPosRect
, LPCRECT lprcClipRect
)
498 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
500 TRACE("(%p)->(%p %p)\n", This
, lprcPosRect
, lprcClipRect
);
502 if(This
->shell_embedding_hwnd
) {
503 SetWindowPos(This
->shell_embedding_hwnd
, NULL
,
504 lprcPosRect
->left
, lprcPosRect
->top
,
505 lprcPosRect
->right
-lprcPosRect
->left
,
506 lprcPosRect
->bottom
-lprcPosRect
->top
,
507 SWP_NOZORDER
| SWP_NOACTIVATE
);
513 static HRESULT WINAPI
OleInPlaceObject_ReactivateAndUndo(IOleInPlaceObject
*iface
)
515 WebBrowser
*This
= INPLACEOBJ_THIS(iface
);
516 FIXME("(%p)\n", This
);
520 #undef INPLACEOBJ_THIS
522 static const IOleInPlaceObjectVtbl OleInPlaceObjectVtbl
=
524 OleInPlaceObject_QueryInterface
,
525 OleInPlaceObject_AddRef
,
526 OleInPlaceObject_Release
,
527 OleInPlaceObject_GetWindow
,
528 OleInPlaceObject_ContextSensitiveHelp
,
529 OleInPlaceObject_InPlaceDeactivate
,
530 OleInPlaceObject_UIDeactivate
,
531 OleInPlaceObject_SetObjectRects
,
532 OleInPlaceObject_ReactivateAndUndo
535 /**********************************************************************
536 * Implement the IOleControl interface
539 #define CONTROL_THIS(iface) DEFINE_THIS(WebBrowser, OleControl, iface)
541 static HRESULT WINAPI
OleControl_QueryInterface(IOleControl
*iface
,
542 REFIID riid
, LPVOID
*ppobj
)
544 WebBrowser
*This
= CONTROL_THIS(iface
);
545 return IWebBrowser_QueryInterface(WEBBROWSER(This
), riid
, ppobj
);
548 static ULONG WINAPI
OleControl_AddRef(IOleControl
*iface
)
550 WebBrowser
*This
= CONTROL_THIS(iface
);
551 return IWebBrowser_AddRef(WEBBROWSER(This
));
554 static ULONG WINAPI
OleControl_Release(IOleControl
*iface
)
556 WebBrowser
*This
= CONTROL_THIS(iface
);
557 return IWebBrowser_Release(WEBBROWSER(This
));
560 static HRESULT WINAPI
OleControl_GetControlInfo(IOleControl
*iface
, LPCONTROLINFO pCI
)
562 WebBrowser
*This
= CONTROL_THIS(iface
);
563 FIXME("(%p)->(%p)\n", This
, pCI
);
567 static HRESULT WINAPI
OleControl_OnMnemonic(IOleControl
*iface
, struct tagMSG
*pMsg
)
569 WebBrowser
*This
= CONTROL_THIS(iface
);
570 FIXME("(%p)->(%p)\n", This
, pMsg
);
574 static HRESULT WINAPI
OleControl_OnAmbientPropertyChange(IOleControl
*iface
, DISPID dispID
)
576 WebBrowser
*This
= CONTROL_THIS(iface
);
577 FIXME("(%p)->(%ld)\n", This
, dispID
);
581 static HRESULT WINAPI
OleControl_FreezeEvents(IOleControl
*iface
, BOOL bFreeze
)
583 WebBrowser
*This
= CONTROL_THIS(iface
);
584 FIXME("(%p)->(%x)\n", This
, bFreeze
);
590 static const IOleControlVtbl OleControlVtbl
=
592 OleControl_QueryInterface
,
595 OleControl_GetControlInfo
,
596 OleControl_OnMnemonic
,
597 OleControl_OnAmbientPropertyChange
,
598 OleControl_FreezeEvents
601 #define ACTIVEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleInPlaceActiveObject, iface)
603 static HRESULT WINAPI
InPlaceActiveObject_QueryInterface(IOleInPlaceActiveObject
*iface
,
604 REFIID riid
, void **ppv
)
606 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
607 return IWebBrowser2_QueryInterface(WEBBROWSER2(This
), riid
, ppv
);
610 static ULONG WINAPI
InPlaceActiveObject_AddRef(IOleInPlaceActiveObject
*iface
)
612 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
613 return IWebBrowser2_AddRef(WEBBROWSER2(This
));
616 static ULONG WINAPI
InPlaceActiveObject_Release(IOleInPlaceActiveObject
*iface
)
618 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
619 return IWebBrowser2_Release(WEBBROWSER2(This
));
622 static HRESULT WINAPI
InPlaceActiveObject_GetWindow(IOleInPlaceActiveObject
*iface
,
625 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
626 return IOleInPlaceObject_GetWindow(INPLACEOBJ(This
), phwnd
);
629 static HRESULT WINAPI
InPlaceActiveObject_ContextSensitiveHelp(IOleInPlaceActiveObject
*iface
,
632 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
633 return IOleInPlaceObject_ContextSensitiveHelp(INPLACEOBJ(This
), fEnterMode
);
636 static HRESULT WINAPI
InPlaceActiveObject_TranslateAccelerator(IOleInPlaceActiveObject
*iface
,
639 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
640 FIXME("(%p)->(%p)\n", This
, lpmsg
);
644 static HRESULT WINAPI
InPlaceActiveObject_OnFrameWindowActivate(IOleInPlaceActiveObject
*iface
,
647 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
648 FIXME("(%p)->(%x)\n", This
, fActivate
);
652 static HRESULT WINAPI
InPlaceActiveObject_OnDocWindowActivate(IOleInPlaceActiveObject
*iface
,
655 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
656 FIXME("(%p)->(%x)\n", This
, fActivate
);
660 static HRESULT WINAPI
InPlaceActiveObject_ResizeBorder(IOleInPlaceActiveObject
*iface
,
661 LPCRECT lprcBorder
, IOleInPlaceUIWindow
*pUIWindow
, BOOL fFrameWindow
)
663 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
664 FIXME("(%p)->(%p %p %x)\n", This
, lprcBorder
, pUIWindow
, fFrameWindow
);
668 static HRESULT WINAPI
InPlaceActiveObject_EnableModeless(IOleInPlaceActiveObject
*iface
,
671 WebBrowser
*This
= ACTIVEOBJ_THIS(iface
);
672 FIXME("(%p)->(%x)\n", This
, fEnable
);
676 #undef ACTIVEOBJ_THIS
678 static const IOleInPlaceActiveObjectVtbl OleInPlaceActiveObjectVtbl
= {
679 InPlaceActiveObject_QueryInterface
,
680 InPlaceActiveObject_AddRef
,
681 InPlaceActiveObject_Release
,
682 InPlaceActiveObject_GetWindow
,
683 InPlaceActiveObject_ContextSensitiveHelp
,
684 InPlaceActiveObject_TranslateAccelerator
,
685 InPlaceActiveObject_OnFrameWindowActivate
,
686 InPlaceActiveObject_OnDocWindowActivate
,
687 InPlaceActiveObject_ResizeBorder
,
688 InPlaceActiveObject_EnableModeless
691 void WebBrowser_OleObject_Init(WebBrowser
*This
)
693 This
->lpOleObjectVtbl
= &OleObjectVtbl
;
694 This
->lpOleInPlaceObjectVtbl
= &OleInPlaceObjectVtbl
;
695 This
->lpOleControlVtbl
= &OleControlVtbl
;
696 This
->lpOleInPlaceActiveObjectVtbl
= &OleInPlaceActiveObjectVtbl
;
699 This
->container
= NULL
;
701 This
->frame_hwnd
= NULL
;
703 This
->uiwindow
= NULL
;
704 This
->shell_embedding_hwnd
= NULL
;
706 memset(&This
->pos_rect
, 0, sizeof(RECT
));
707 memset(&This
->clip_rect
, 0, sizeof(RECT
));
708 memset(&This
->frameinfo
, 0, sizeof(OLEINPLACEFRAMEINFO
));
711 void WebBrowser_OleObject_Destroy(WebBrowser
*This
)
714 IOleObject_SetClientSite(OLEOBJ(This
), NULL
);
716 IOleContainer_Release(This
->container
);
718 IOleInPlaceFrame_Release(This
->frame
);
720 IOleInPlaceUIWindow_Release(This
->uiwindow
);