External function support added.
This commit is contained in:
@@ -62,56 +62,11 @@ bool IEBrowser::navigateSyncURL(wchar_t* url)
|
||||
if (webBrowser)
|
||||
{
|
||||
webBrowser->Navigate(url,0,0,0,0);
|
||||
for (int i=1;i<1000;i++)
|
||||
{
|
||||
while (PeekMessage (&messages, NULL, 0, 0,PM_REMOVE))
|
||||
{
|
||||
if (IsDialogMessage(hwnd, &messages) == 0)
|
||||
{
|
||||
TranslateMessage(&messages);
|
||||
DispatchMessage(&messages);
|
||||
}
|
||||
}
|
||||
|
||||
Sleep(30);
|
||||
|
||||
HRESULT hresult = webBrowser->get_Document(&spDocument);
|
||||
if (SUCCEEDED(hresult) && (spDocument != 0))
|
||||
{
|
||||
|
||||
IOleObject* spOleObject;
|
||||
if (SUCCEEDED(spDocument->QueryInterface(IID_IOleObject,(void**)&spOleObject)))
|
||||
{
|
||||
IOleClientSite* spClientSite;
|
||||
hresult = spOleObject->GetClientSite(&spClientSite);
|
||||
if (SUCCEEDED(hresult) && spClientSite)
|
||||
{
|
||||
m_spDefaultDocHostUIHandler = spClientSite;
|
||||
ICustomDoc* spCustomDoc;
|
||||
|
||||
//IEDispatcher* spIEDispatcher;
|
||||
if (SUCCEEDED(m_spDefaultDocHostUIHandler->QueryInterface(IID_IDocHostUIHandler,(void**)&m_spHandler)))
|
||||
{
|
||||
if (SUCCEEDED(spDocument->QueryInterface(IID_ICustomDoc,(void**)&spCustomDoc)))
|
||||
{
|
||||
spCustomDoc->SetUIHandler(m_spHandler);
|
||||
m_spHandler->GetExternal(&m_spExternal);
|
||||
spDocument->QueryInterface(IID_IHTMLDocument2, (void **) &spDocument2);
|
||||
setExternal(&m_spExternal);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox(NULL,"Cannot read IWebBrowser2...",(g_PlaceholderName+" Crash").c_str(),MB_OK);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
46
ax.cpp
46
ax.cpp
@@ -11,7 +11,6 @@
|
||||
#pragma warning (disable: 4244)
|
||||
#pragma warning (disable: 4800)
|
||||
|
||||
|
||||
// AXClientSite class
|
||||
// ------- Implement member functions
|
||||
AXClientSite :: AXClientSite()
|
||||
@@ -83,7 +82,14 @@ STDMETHODIMP AXClientSite :: GetDropTarget( IDropTarget *pDropTarget, IDropTarge
|
||||
|
||||
STDMETHODIMP AXClientSite :: GetExternal(IDispatch **ppDispatch)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
//IDispatch* disp = ax->GetExternalDispatch();
|
||||
*ppDispatch = this;
|
||||
/* if (disp!=NULL)
|
||||
{
|
||||
*ppDispatch = this;
|
||||
return S_OK;
|
||||
} */
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP AXClientSite ::TranslateUrl( DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
|
||||
@@ -330,12 +336,13 @@ HRESULT _stdcall AXClientSite :: GetTypeInfo(
|
||||
|
||||
HRESULT _stdcall AXClientSite :: GetIDsOfNames(
|
||||
REFIID riid,
|
||||
OLECHAR FAR* FAR*,
|
||||
OLECHAR FAR* FAR* ext_function_name,
|
||||
unsigned int cNames,
|
||||
LCID lcid,
|
||||
DISPID FAR* )
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
m_lastExternalName = *ext_function_name;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -355,7 +362,7 @@ void AX :: Init(char* cls)
|
||||
AdviseToken = 0;
|
||||
memset(DAdviseToken,0,sizeof(DAdviseToken));
|
||||
Site.ax = this;
|
||||
|
||||
m_externalDisp = 0;
|
||||
}
|
||||
|
||||
AX :: AX(char* cls)
|
||||
@@ -364,6 +371,15 @@ AX :: AX(char* cls)
|
||||
}
|
||||
|
||||
|
||||
void AX :: SetExternalDispatch(IDispatch* externalDisp)
|
||||
{
|
||||
m_externalDisp = externalDisp;
|
||||
}
|
||||
|
||||
IDispatch* AX :: GetExternalDispatch()
|
||||
{
|
||||
return m_externalDisp;
|
||||
}
|
||||
|
||||
void AX :: Clean()
|
||||
{
|
||||
@@ -501,9 +517,24 @@ HRESULT _stdcall AXClientSite :: Invoke(
|
||||
VARIANT FAR* pVarResult,
|
||||
EXCEPINFO FAR* pExcepInfo,
|
||||
unsigned int FAR* puArgErr)
|
||||
{
|
||||
|
||||
if (m_lastExternalName==L"Insert")
|
||||
{
|
||||
|
||||
MessageBoxW(NULL, pDispParams->rgvarg->bstrVal,L"Add insert here...",MB_OK);
|
||||
return S_OK;
|
||||
}
|
||||
else if (m_lastExternalName==L"Boop")
|
||||
{
|
||||
MessageBox(NULL, "BOOP", "Boopity boop",MB_OK);
|
||||
}
|
||||
else
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
void _stdcall AXClientSite :: OnDataChange(FORMATETC *pFormatEtc,STGMEDIUM *pStgmed)
|
||||
@@ -610,6 +641,11 @@ LRESULT CALLBACK AXWndProc(HWND hh,UINT mm,WPARAM ww,LPARAM ll)
|
||||
|
||||
return true;
|
||||
}
|
||||
if (mm == AX_SETEXTERNALDISP)
|
||||
{
|
||||
AX* ax = (AX*)GetWindowLong(hh,GWL_USERDATA);
|
||||
ax->SetExternalDispatch((IDispatch*)ll);
|
||||
}
|
||||
|
||||
if (mm == AX_GETAXINTERFACE)
|
||||
{
|
||||
|
||||
12
ax.h
12
ax.h
@@ -1,5 +1,6 @@
|
||||
// AX.H
|
||||
#include <mshtmhst.h>
|
||||
#include <string>
|
||||
|
||||
// messages
|
||||
#define AX_QUERYINTERFACE (WM_USER + 1)
|
||||
@@ -9,6 +10,7 @@
|
||||
#define AX_DISCONNECTOBJECT (WM_USER + 5)
|
||||
#define AX_SETDATAADVISE (WM_USER + 6)
|
||||
#define AX_DOVERB (WM_USER + 7)
|
||||
#define AX_SETEXTERNALDISP (WM_USER + 8)
|
||||
|
||||
|
||||
// Registration function
|
||||
@@ -30,7 +32,6 @@ class AXClientSite :
|
||||
|
||||
public:
|
||||
|
||||
|
||||
HWND Window;
|
||||
HWND Parent;
|
||||
HMENU Menu;
|
||||
@@ -149,14 +150,13 @@ class AXClientSite :
|
||||
STDMETHODIMP EnableModeless(BOOL f);
|
||||
STDMETHODIMP TranslateAccelerator(LPMSG,WORD);
|
||||
|
||||
std::wstring m_lastExternalName;
|
||||
|
||||
// IDispatch Methods
|
||||
HRESULT _stdcall GetTypeInfoCount(unsigned int * pctinfo);
|
||||
HRESULT _stdcall GetTypeInfo(unsigned int iTInfo,LCID lcid,ITypeInfo FAR* FAR* ppTInfo);
|
||||
HRESULT _stdcall GetIDsOfNames(REFIID riid,OLECHAR FAR* FAR*,unsigned int cNames,LCID lcid,DISPID FAR* );
|
||||
HRESULT _stdcall Invoke(DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS FAR* pDispParams,VARIANT FAR* pVarResult,EXCEPINFO FAR* pExcepInfo,unsigned int FAR* puArgErr);
|
||||
|
||||
// IOleControlSite Methods
|
||||
};
|
||||
|
||||
|
||||
@@ -187,12 +187,12 @@ class AX
|
||||
bool AddMenu;
|
||||
DWORD AdviseToken;
|
||||
DWORD DAdviseToken[100];
|
||||
|
||||
|
||||
void SetExternalDispatch(IDispatch* externalDisp);
|
||||
IDispatch* GetExternalDispatch();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
IDispatch* m_externalDisp;
|
||||
CLSID clsid;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user