MSDN Knowledge Base Q185538 HOWTO: Cause Navigation to Occur in Same WebBrowser Window Q294870 BUG: Using NewWindow or NewWindow2 to Always Navigate in the Same Window Fails in Some Instances
If you have a Microsoft Foundation Classes (MFC) application and use NewWindow to navigate in the same window, the following code fails in Internet Explorer 5.5: void CDWebBrowserEvents::OnNewWindow(BSTR URL, long Flags, BSTR TargetFrameName, VARIANT* PostData, BSTR Headers, BOOL FAR* Processed) { if (m_Browser) { COleVariant varEmpty; *Processed = TRUE; m_Browser->Navigate((LPCSTR)URL, &varEmpty, &varEmpty, &varEmpty, &varEmpty); } }
If you use NewWindow2, the following code fails in all versions of the Internet Explorer: void CIEDlg::OnNewWindow2(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel) { IUnknown* pUnk = m_Browser.GetControlUnknown(); if (pUnk) { IDispatch* pDisp = NULL; HRESULT hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDisp); if (SUCCEEDED(hr) && pDisp) *ppDisp = pDisp; } }
这是对话框的处理……你看看是不是要显示一堆对话框……
void CYourDlg::OnNewWindow2(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel)
{
m_dlgNewWB = new CYourDlg;
m_dlgNewWB->Create(IDD_WBDLG_DIALOG); m_dlgNewWB->m_webBrowser.SetRegisterAsBrowser(TRUE); *ppDisp = m_dlgNewWB->m_webBrowser.GetApplication();
}
Knowledge Base
Q185538 HOWTO: Cause Navigation to Occur in Same WebBrowser Window
Q294870 BUG: Using NewWindow or NewWindow2 to Always Navigate in the Same Window Fails in Some Instances
void CDWebBrowserEvents::OnNewWindow(BSTR URL, long Flags, BSTR TargetFrameName,
VARIANT* PostData, BSTR Headers, BOOL FAR* Processed)
{
if (m_Browser) {
COleVariant varEmpty;
*Processed = TRUE;
m_Browser->Navigate((LPCSTR)URL, &varEmpty, &varEmpty, &varEmpty, &varEmpty);
}
}
If you use NewWindow2, the following code fails in all versions of the Internet Explorer:
void CIEDlg::OnNewWindow2(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel)
{ IUnknown* pUnk = m_Browser.GetControlUnknown();
if (pUnk)
{
IDispatch* pDisp = NULL;
HRESULT hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDisp); if (SUCCEEDED(hr) && pDisp)
*ppDisp = pDisp;
}
}