描述:
我想重新封装一下CWebBrowser包裹类,使他能接收到NavigateComplete等事件,大家有例子吗?或者给小弟搭个框架。
分数不够可以再加,愿意赠送1000分,请各位COM/VC高手帮个忙!
解决方案1:
up
解决方案2: BEGIN_DISPATCH_MAP(CLaunchIEDlg, CDialog)
DISP_FUNCTION_ID(CLaunchIEDlg, "BeforeNavigate2", DISPID_BEFORENAVIGATE2,
OnBeforeNavigate2, VT_EMPTY, VTS_DISPATCH VTS_PVARIANT
VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)
DISP_FUNCTION_ID(CLaunchIEDlg, "CommandStateChange", DISPID_COMMANDSTATECHANGE,
OnCommandStateChange, VT_EMPTY, VTS_I4 VTS_BOOL)
DISP_FUNCTION_ID(CLaunchIEDlg, "DocumentComplete", DISPID_DOCUMENTCOMPLETE,
OnDocumentComplete, VT_EMPTY, VTS_DISPATCH VTS_PVARIANT)
DISP_FUNCTION_ID(CLaunchIEDlg, "DownloadComplete", DISPID_DOWNLOADCOMPLETE,
OnDownloadComplete, VT_EMPTY, VTS_NONE)
DISP_FUNCTION_ID(CLaunchIEDlg, "NavigateComplete2", DISPID_NAVIGATECOMPLETE2,
OnNavigateComplete2, VT_EMPTY, VTS_DISPATCH VTS_PVARIANT)
DISP_FUNCTION_ID(CLaunchIEDlg, "NewWindow2", DISPID_NEWWINDOW2,
OnNewWindow2, VT_EMPTY, VTS_DISPATCH VTS_PBOOL)
DISP_FUNCTION_ID(CLaunchIEDlg, "OnQuit", DISPID_ONQUIT, OnQuit, VT_EMPTY, VTS_NONE)
DISP_FUNCTION_ID(CLaunchIEDlg, "ProgressChange", DISPID_PROGRESSCHANGE,
OnProgressChange, VT_EMPTY, VTS_I4 VTS_I4)
DISP_FUNCTION_ID(CLaunchIEDlg, "StatusTextChange", DISPID_STATUSTEXTCHANGE,
OnStatusTextChange, VT_EMPTY, VTS_BSTR)
DISP_FUNCTION_ID(CLaunchIEDlg, "TitleChange", DISPID_TITLECHANGE,
OnTitleChange, VT_EMPTY, VTS_BSTR)
END_DISPATCH_MAP()
void CLaunchIEDlg::ConnectEvents()
{
// Set up the event sink
BOOL bAdvised = AfxConnectionAdvise(m_pWebBrowserApp, DIID_DWebBrowserEvents2,
this->GetInterface(&IID_IUnknown),
TRUE, &m_dwCookie);
TRACE("Advise for DWebBrowserEvents2 %s\n", bAdvised ? "succeeded" : "failed");
}
void CLaunchIEDlg::DisconnectEvents()
{
if (m_dwCookie)
{
BOOL bUnadvised = AfxConnectionUnadvise(m_pWebBrowserApp, DIID_DWebBrowserEvents2,
this->GetInterface(&IID_IUnknown),
TRUE, m_dwCookie);
TRACE("Unadvise for DWebBrowserEvents2 %s\n", bUnadvised ? "succeeded" : "failed");
m_dwCookie = 0;
}
}
void CLaunchIEDlg::OnButtonLaunch()
{
// TODO: Add your control notification handler code here
if(!UpdateData())return;
//if(!PathIsURL(m_strURL))
// m_strURL=_T("about:blank");
if(m_pWebBrowserApp==NULL)
m_pWebBrowserApp.CoCreateInstance(CLSID_InternetExplorer,NULL,CLSCTX_LOCAL_SERVER);
ConnectEvents();
COleVariant vurl((LPCTSTR)m_strURL);
COleVariant vEmpty;
HRESULT hr=m_pWebBrowserApp->put_Visible(VARIANT_TRUE);
hr;
hr=m_pWebBrowserApp->Navigate2(&vurl,&vEmpty,&vEmpty,&vEmpty,&vEmpty);
hr;
}
search "walkall" in microsoft.com