Mercurial > dwindows
diff win/browser.c @ 2021:0cce5fed4594
Win: get_HWND method does not seem to be working, so use Set/GetProperty()
to save the browser window handle for use in the DWebBrowserEvents2 callbacks.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sat, 09 Nov 2019 06:33:08 +0000 |
parents | 583c2d62845c |
children | 28809bf17957 |
line wrap: on
line diff
--- a/win/browser.c Fri Nov 08 13:06:47 2019 +0000 +++ b/win/browser.c Sat Nov 09 06:33:08 2019 +0000 @@ -1162,12 +1162,15 @@ // Params are in the variant array from right to left wrt how they are defined in the documentation. LPCWSTR pszURL = pDispParams->rgvarg[5].pvarVal->bstrVal; IWebBrowser2* pwb = (IWebBrowser2*)pDispParams->rgvarg[pDispParams->cArgs - 1].byref; - LONG_PTR tmp; + VARIANT vWindow; + BSTR bstrProp = SysAllocString(L"DWindow"); HWND hwnd; /* Get the window handle and URL */ - pwb->lpVtbl->get_HWND(pwb, &tmp); - hwnd = (HWND)tmp; + vWindow.vt = VT_UI8; + pwb->lpVtbl->GetProperty(pwb, bstrProp, &vWindow); + hwnd = (HWND)vWindow.ullVal; + SysFreeString(bstrProp); /* Send the event for signal handling */ _wndproc(hwnd, WM_USER+101, (WPARAM)DW_INT_TO_POINTER(DW_HTML_CHANGE_STARTED), (LPARAM)WideToUTF8((LPWSTR)pszURL)); @@ -1178,13 +1181,16 @@ case DISPID_DOCUMENTCOMPLETE: { IWebBrowser2* pwb = (IWebBrowser2*)pDispParams->rgvarg[pDispParams->cArgs - 1].byref; - LONG_PTR tmp; + VARIANT vWindow; + BSTR bstrProp = SysAllocString(L"DWindow"); HWND hwnd; BSTR locationURL; /* Get the window handle and URL */ - pwb->lpVtbl->get_HWND(pwb, &tmp); - hwnd = (HWND)tmp; + vWindow.vt = VT_UI8; + pwb->lpVtbl->GetProperty(pwb, bstrProp, &vWindow); + hwnd = (HWND)vWindow.byref; + SysFreeString(bstrProp); pwb->lpVtbl->get_LocationURL(pwb, &locationURL); /* Send the event for signal handling */ _wndproc(hwnd, WM_USER+101, (WPARAM)DW_INT_TO_POINTER(DW_HTML_CHANGE_COMPLETE), (LPARAM)WideToUTF8((LPWSTR)locationURL)); @@ -1809,6 +1815,8 @@ IConnectionPointContainer *container; IConnectionPoint *point; HRESULT hr; + VARIANT vWindow; + BSTR bstrProp; // Ok, now the pointer to our IWebBrowser2 object is in 'webBrowser2', and so its VTable is // webBrowser2->lpVtbl. @@ -1822,6 +1830,14 @@ webBrowser2->lpVtbl->put_Width(webBrowser2, rect.right); webBrowser2->lpVtbl->put_Height(webBrowser2, rect.bottom); + // Save the window handle as a property for later use + VariantInit(&vWindow); + vWindow.vt = VT_UI8; + vWindow.ullVal = (ULONGLONG)hwnd; + bstrProp = SysAllocString(L"DWindow"); + webBrowser2->lpVtbl->PutProperty(webBrowser2, bstrProp, vWindow); + SysFreeString(bstrProp); + // Get IWebBrowser2' IConnectionPointContainer sub-object. We do this by calling // IWebBrowser2' QueryInterface, and pass it the standard GUID for an // IConnectionPointContainer VTable