我写了一个基于CHtmlView的程序,怎样完整实现window.open呢?


我写了一个基于CHtmlView的程序,怎样完整实现对window.open的脚本支持呢?
window.open()的一版使用方式为window.open(url,targetName,features,replace)
通常用前三个参数(我还没用过第四个),features里指定了窗口的大小,是否现实菜单,地址栏等特性,如:
window.open("http://www.csdn.net","somewindow","width=400,height=450,menubar=no,status=no");


我重载了OnNewWindow2

-------------------------------
void CWebClientView::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 );
   CWebClientView* pView = (CWebClientView*)pFrame->GetActiveView();

   // Pass pointer of WebBrowser object.
   pView->SetRegisterAsBrowser( TRUE );
   *ppDisp = pView->GetApplication();   

}

以上代码实现了新打开的窗口用我的程序中打开,但是没办法获得窗口特性的参数,也不知道把窗口调整成什么样子。

7 个解决方案

#1


帮你顶上去

#2


你应该创建一个隐藏的新的窗口,在那里捕获BeforeNavigate2

#3


to:jiangsheng

还是不明白,BeforeNavigate2并没有哪个参数表明window.open里的参数啊。

IHTMLWindow2::open的参数和javascript脚本里的window.open是一致的,是不是window.open会最终使用IHTMLWindow2::open来打开新窗口呢?
如果是这样,我怎么改变IE js脚本里window对象的行为呢。

#4


窗口大小,是否显示状态栏什么的你都可以自己控制啊

#5


我想把窗口调整成window.open(rul,win,"width=400,height=450,menubar=no,status=no");里规定的样子,我现在没有办法获取到第三个参数的内容,也没有办法获取到第二个参数的内容。

#6


问题解决了,重载OnUpdateUI(),获取CHtmlView窗口的大小,是否显示菜单等信息。然后设置frame的各种特性。

#7


CString str;

str.LoadString(IDS_FILETYPES);

CFileDialog fileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, str);

if(fileDlg.DoModal() == IDOK)
Navigate2(fileDlg.GetPathName(), 0, NULL);
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告