《VC技术内幕》里第八章有一个例子,在一个view窗口里创建两个WebBrowser的对象,当点击右侧页面的链接时,在左侧进行显示。我照着把程序输入,编译运行。但是发现,点击链接后,并不象预想中的那样在左侧显示,而是直接跳出一个新的ie界面。请问各位,如果要达到预期效果该怎么做?为什么会出现这种现象呢?是与所使用的控件有关吗?我用的系统是2k professional,书上所用的控件是ie4.x的,问题是不是出在这里?谢谢。
解决方案 »
- To chenlycly
- 具体时间点工作
- 数据库控件
- 动态库中的对话框加载速度慢
- 如何用VC编写一个SMTP服务器啊
- 请问MDIGetActive和GetActiveFrame有什么区别啊
- 【版务】倒分贴子,希望大斑竹处理,多谢!另外,凡在举报界面版倒分的人士,经核实无误每次奖励150可用分!
- 又是我,再问问,ActiveX里的对话框为什么在OnOK 或 OnCancel 时会报错
- 郁闷了一整天,也不知道是什么原因,大家棒我看看!!
- 请问ghost7.5自动安装客户端是如何实现的?哪里有这方面的资料?
- 请问:创建监听Socket就等于Create()了吗?
- 编译错误!!我看不懂是什么原因!请帮我看一下!
void CMyHtmlView::OnNewWindow2(LPDISPATCH* ppDisp, BOOL* Cancel)
{
// Get a pointer to the application object.
CWinApp* pApp = AfxGetApp(); // Get the correct document template.
POSITION pos = pApp->GetFirstDocTemplatePosition();
CDocTemplate* pDocTemplate = pApp->GetNextDocTemplate( pos ); // Create a new frame.
CFrameWnd* pFrame = pDocTemplate->CreateNewFrame(
GetDocument(),
(CFrameWnd*)AfxGetMainWnd() ); // Activate the frame.
pDocTemplate->InitialUpdateFrame( pFrame, NULL );
CNewWindow2View* pView = (CNewWindow2View*)pFrame->GetActiveView(); // Pass pointer of WebBrowser object.
pView->SetRegisterAsBrowser( TRUE );
*ppDisp = pView->GetApplication();
}其中CNewWindow2View就是你左侧的View
class CEx08BView : public CView
{
protected: // create from serialization only
CEx08BView();
DECLARE_DYNCREATE(CEx08BView)//... 这两个函数分别由两个WebBrowser对象响应
afx_msg void OnBeforeNavigateExplorer1(LPCTSTR URL,\
long Flags, LPCTSTR TargetFrameName, VARIANT FAR* PostData,\
LPCTSTR Headers, BOOL FAR* Cancel);
afx_msg void OnTitleChangeExplorer2(LPCTSTR Text);
DECLARE_EVENTSINK_MAP()
private:
static const char s_engine[]; //搜索引擎
CWebBrowser m_target; //用来显示结果的页面
CWebBrowser m_search; //搜索页面
};//Ex08BView.cpp
//...
BEGIN_EVENTSINK_MAP(CEx08BView, CView)
ON_EVENT(CEx08BView, ID_BROWSER_SEARCH, 100, OnBeforeNavigateExplorer1,
VTS_BSTR VTS_I4 VTS_BSTR VTS_PVARIANT VTS_BSTR VTS_PBOOL)
ON_EVENT(CEx08BView, ID_BROWSER_TARGET, 113,OnTitleChangeExplorer2,
VTS_BSTR)
END_EVENTSINK_MAP()const char CEx08BView::s_engine[]="http://www.msn.com/";//...问题在这里,这个函数似乎从来就没有被调用过,debug也没见有什么反应
void CEx08BView::OnBeforeNavigateExplorer1(LPCTSTR URL,\
long Flags, LPCTSTR TargetFrameName, VARIANT FAR* PostData,\
LPCTSTR Headers, BOOL FAR* Cancel)
{
TRACE("CEx08BView::OnBeforeNavigateExplorer1--URL=%s\n", URL);
if(!strnicmp(URL, s_engine, strlen(s_engine)))
{
return;
}
m_target.Navigate(URL, NULL, NULL, PostData, NULL);
*Cancel=TRUE;
}//这个就更不用说了,不执行
void CEx08BView::OnTitleChangeExplorer2(LPCTSTR Text)
{
CWnd* pWnd=AfxGetApp()->m_pMainWnd;
if(pWnd!=NULL)
if(::IsWindow(pWnd->m_hWnd))
pWnd->SetWindowText(Text);
}到底该怎么办呢?谢谢!
我看好像是不行的,这两个消息好像根本就不发送到你的View中,你自然接收不到,你把以上代码加到CMainFrame里面试试