gecko/embedding/browser/activex/tests/cbrowse/ControlEventSink.cpp

170 lines
4.9 KiB
C++

// ControlEventSink.cpp : Implementation of CBrowseEventSink
#include "stdafx.h"
#include "Cbrowse.h"
#include "ControlEventSink.h"
/////////////////////////////////////////////////////////////////////////////
// CBrowseEventSink
HRESULT STDMETHODCALLTYPE CBrowseEventSink::GetTypeInfoCount(
/* [out] */ UINT __RPC_FAR *pctinfo)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CBrowseEventSink::GetTypeInfo(
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CBrowseEventSink::GetIDsOfNames(
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
/* [in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID __RPC_FAR *rgDispId)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CBrowseEventSink:: Invoke(
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
/* [out] */ VARIANT __RPC_FAR *pVarResult,
/* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
/* [out] */ UINT __RPC_FAR *puArgErr)
{
CString szEvent;
switch (dispIdMember)
{
case 0x66:
{
USES_CONVERSION;
CString szText(OLE2T(pDispParams->rgvarg[0].bstrVal));
szEvent.Format(_T("StatusTextChange: \"%s\""), szText);
m_pBrowseDlg->m_TabMessages.m_szStatus = szText;
m_pBrowseDlg->m_TabMessages.UpdateData(FALSE);
}
break;
case 0x6c:
{
LONG nProgress = pDispParams->rgvarg[1].lVal;
LONG nProgressMax = pDispParams->rgvarg[0].lVal;
szEvent.Format("ProgressChange(%d of %d)", nProgress, nProgressMax);
CProgressCtrl &pc = m_pBrowseDlg->m_TabMessages.m_pcProgress;
pc.SetRange(0, nProgressMax);
pc.SetPos(nProgress);
}
break;
case 0x69:
{
BOOL enable = pDispParams->rgvarg[0].boolVal == VARIANT_TRUE ? TRUE : FALSE;
LONG commandState = pDispParams->rgvarg[1].lVal;
if (commandState == CSC_NAVIGATEBACK)
{
m_pBrowseDlg->m_bCanGoBack = enable;
m_pBrowseDlg->m_btnBack.EnableWindow(enable);
}
else if (commandState == CSC_NAVIGATEFORWARD)
{
m_pBrowseDlg->m_bCanGoForward = enable;
m_pBrowseDlg->m_btnForward.EnableWindow(enable);
}
szEvent.Format(_T("CommandStateChange(%ld, %d)"), commandState, enable);
}
break;
case 0x6a:
szEvent = _T("DownloadBegin");
m_pBrowseDlg->m_btnStop.EnableWindow(TRUE);
break;
case 0x68:
szEvent = _T("DownloadComplete");
m_pBrowseDlg->m_btnStop.EnableWindow(FALSE);
break;
case 0x71:
{
USES_CONVERSION;
CString szText(OLE2T(pDispParams->rgvarg[0].bstrVal));
szEvent.Format(_T("TitleChange: \"%s\""), szText);
CString szTitle;
szTitle.Format(_T("CBrowse - %s"), szText);
m_pBrowseDlg->SetWindowText(szTitle);
}
break;
case 0x70:
szEvent = _T("PropertyChange");
break;
case 0xfa:
szEvent = _T("BeforeNavigate2");
break;
case 0xfb:
{
szEvent = _T("NewWindow2");
VARIANTARG *pvars = pDispParams->rgvarg;
CBrowseDlg *pDlg = new CBrowseDlg;
if (pDlg)
{
pDlg->m_clsid = m_pBrowseDlg->m_clsid;
pDlg->Create(IDD_CBROWSE_DIALOG);
if (pDlg->m_pControlSite)
{
CIUnkPtr spUnkBrowser;
pDlg->m_pControlSite->GetControlUnknown(&spUnkBrowser);
pvars[0].byref = (void *) VARIANT_FALSE;
spUnkBrowser->QueryInterface(IID_IDispatch, (void **) pvars[1].byref);
}
}
}
break;
case 0xfc:
szEvent = _T("NavigateComplete2");
break;
case 0x103:
szEvent = _T("DocumentComplete");
if (m_pBrowseDlg)
{
m_pBrowseDlg->UpdateURL();
}
break;
case 0xfd:
szEvent = _T("OnQuit");
break;
case 0xfe:
szEvent = _T("OnVisible");
break;
case 0xff:
szEvent = _T("OnToolBar");
break;
case 0x100:
szEvent = _T("OnMenuBar");
break;
case 0x101:
szEvent = _T("OnStatusBar");
break;
case 0x102:
szEvent = _T("OnFullScreen");
break;
case 0x104:
szEvent = _T("OnTheaterMode");
break;
default:
szEvent.Format(_T("%d"), dispIdMember);
}
if (m_pBrowseDlg)
{
m_pBrowseDlg->OutputString(_T("Event %s"), szEvent);
}
return S_OK;
}