一般情况下我们点击链接,如果是新建窗口,会调用其他浏览器打开。我的view类是继承 CFormView,下面是解决这种问题的一种办法:
一、在YourView类中新建自定义消息
1.在YourView类 头文件中添加 #define WM_MY_MESSAGE_SEARCH WM_USER+200
afx_msg LRESULT OnMySearch(WPARAM wparam,LPARAM lparam);
2.在YourView类 cpp文件中添加:
在MESSAGE_MAP 中添加 ON_MESSAGE(WM_MY_MESSAGE_SEARCH, OnMySearch) 。
添加消息的实现函数:
LRESULT CMyIExplorerView::OnMySearch(WPARAM wparam,LPARAM lparam)
{
CString *Url = (CString*) lparam;
m_header= L"User-Agent:Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko";
_variant_t vUrl(*Url);
_variant_t vEmpty;
_variant_t vHeader(m_strNewHeader);
m_web.Navigate2(&vUrl,&vEmpty,&vEmpty,&vEmpty,&vHeader); //m_web浏览控件对象
return 0;
}
二、在MainFrm 类中添加自定义消息,基本步骤和上面基本相同,我这里的消息ID为 #define WM_MY_FRAME_MSG WM_USER+100
LRESULT CMainFrame::OnMyFrameMsg(WPARAM wparam,LPARAM lparam)
{
CString Url = *((CString*)lparam);
::SendMessage(:: AfxGetMainWnd() -> m_hWnd, WM_COMMAND, ID_FILE_NEW,0);
CMDIChildWnd*pChild=(CMDIChildWnd*) GetActiveFrame();
CMyIExplorerView *view = (CMyIExplorerView*) pChild->GetActiveView();
HWND hwnd =view->m_hWnd;
::SendMessage(hwnd,WM_MY_MESSAGE_SEARCH,(WPARAM)&m_type,(LPARAM)&Url);
return 0;
}
三、在YourView类中,添加浏览器控件事件NewWindow3,如下:
void CMyIExplorerView::NewWindow3Explorer(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR bstrUrlContext, LPCTSTR bstrUrl)
{
CString Url = bstrUrl;
::SendMessage(AfxGetMainWnd()->m_hWnd,WM_MY_FRAME_MSG,NULL,(LPARAM)&Url);
*Cancel = TRUE;
}