您的位置:首页 > 其它

弹出新网页在新的对话框中打开

2012-06-05 16:10 148 查看
先用VS2008新建基于对话框的MFC应用程序,添加webbrowser控件,Navigate导航!
具体看上篇blog

http://blog.csdn.net/LightBoat09/archive/2010/12/14/6074967.aspx

本篇的工程是在上篇的工程项目进行添加...

一,新建对话框

ID 为 IDD_DIALOG_NEW

对话框的Minimize Box属性设为True,

Maximize Box属性也设为True,

二,添加webbrower控件

资源对话框上右击选择[插入ActiveX控件],选择[Microsoft Web Browser],点击"确认",

设置ID为IDC_EXPLORER_NEW

三,添加对话框类

资源对话框上右击--->[添加类],弹出“MFC 类向导"

输入类名:CNewDlg,

基类默认是CDialog,

点击"完成"

四,添加webbrowser控件型变量



在类窗口里选择"CNewDlg",选中右击--->[添加]--->[添加变量],弹出“添加成员变量向导”对话框

选择"控件变量"(check BOX框),控件ID选择IDC_EXPLORER_NEW,变量名输入m_newwebBrowser,点击“完成”!

五,现在要做的是弹出新网页窗口时显示在自己建的对话框里

那改写以前(上篇blog)的NewWindow3Explorer1()函数

[cpp]
view plaincopyprint?

void CbrowserDlg::NewWindow3Explorer1(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR bstrUrlContext, LPCTSTR bstrUrl)
{
// TODO: 在此处添加消息处理程序代码

* Cancel = TRUE;
CString strUrl;
strUrl = bstrUrl;
// 新建对话框
CNewDlg *pNewDlg = new CNewDlg;
pNewDlg->Create(IDD_DIALOG_NEW, this);
pNewDlg->ShowWindow(SW_SHOW);
// 网页导航,新的对话框中的webbrowser控件!

VARIANT vInfo;
VariantInit(&vInfo);
pNewDlg->m_newwebBrowser.Navigate(strUrl, &vInfo, &vInfo, &vInfo, &vInfo);
}

[cpp] 
view plaincopyprint?

BOOL CNewDlg::OnInitDialog()  
{  
    CDialog::OnInitDialog();  
    // TODO:  在此添加额外的初始化   
    ShowWindow(SW_SHOWMAXIMIZED);   //窗口最大化
  
    CRect rect;     
    GetClientRect(&rect);  
    // 设置WebBrowser控件位置   
    m_newwebBrowser.MoveWindow(0, 0, rect.Width(), rect.Height());   
    return TRUE;  // return TRUE unless you set the focus to a control
  
    // 异常: OCX 属性页应返回 FALSE 
  
}  

BOOL CNewDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	// TODO:  在此添加额外的初始化
	ShowWindow(SW_SHOWMAXIMIZED);   //窗口最大化
	CRect rect;   
	GetClientRect(&rect);
	// 设置WebBrowser控件位置
	m_newwebBrowser.MoveWindow(0, 0, rect.Width(), rect.Height()); 
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}


现在还有个问题,在新的窗口里又弹出新的窗口怎么办...???

可以试下在百度里搜索百度网址,进入打开,这时在新对话框窗口弹出百度页主页,

接着搜百度主页,进入打开,这时又在IE窗口打开,失去控制了,。。。

不要慌,在窗口里生成新窗口就行了...也是添加NewWindow3消息处理,步骤如下:

七,给新对话框CNewDlg的webbrowser控件添加NewWindow3消息处理

进入资源窗口,这次是新对话框IDD_DIALOG_NEW,再至webbrowser控件(IDC_EXPLORER_NEW)属性窗口,

点击控件事件(闪电状图标),找到NewWindow3,点击后右边有添加NewWindow3ExplorerNew,代码会自动生成

再NewWindow3ExplorerNew里添加代码,其实和第五步的NewWindow3Explorer1()一样...

[cpp]
view plaincopyprint?

void CNewDlg::NewWindow3ExplorerNew(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR bstrUrlContext, LPCTSTR bstrUrl)
{
// TODO: 在此处添加消息处理程序代码

* Cancel = TRUE;
CString strUrl;
strUrl = bstrUrl;
// 新建对话框
CNewDlg *pNewDlg = new CNewDlg;
pNewDlg->Create(IDD_DIALOG_NEW, this);
pNewDlg->ShowWindow(SW_SHOW);
// 网页导航,新的对话框中的webbrowser控件!

VARIANT vInfo;
VariantInit(&vInfo);
pNewDlg->m_newwebBrowser.Navigate(strUrl, &vInfo, &vInfo, &vInfo, &vInfo);
}

[cpp] 
view plaincopyprint?

void CNewDlg::OnCancel()  
{  
    // TODO: 在此添加专用代码和/或调用基类 
  
    //CDialog::OnCancel();   
    DestroyWindow();  
}  
void CNewDlg::OnOK()  
{  
    // TODO: 在此添加专用代码和/或调用基类 
  
    //CDialog::OnOK();   
    DestroyWindow();  
}  
void CNewDlg::OnNcDestroy()  
{  
    CDialog::OnNcDestroy();  
    // TODO: 在此处添加消息处理程序代码   
    delete this;  
}  

void CNewDlg::OnCancel()
{
	// TODO: 在此添加专用代码和/或调用基类
	//CDialog::OnCancel();
	DestroyWindow();
}
void CNewDlg::OnOK()
{
	// TODO: 在此添加专用代码和/或调用基类
	//CDialog::OnOK();
	DestroyWindow();
}
void CNewDlg::OnNcDestroy()
{
	CDialog::OnNcDestroy();
	// TODO: 在此处添加消息处理程序代码
	delete this;
}


九,打开网页,关闭网页后还是会发现内存增得多,减的少

这个微软的IE内核就是烂,你用IE打开网页,在任务管理器里查看内存,也是增得多,减的少,

google浏览器chrome也好不到哪去...

据说opera控制的是最好的(我没试过)

若想用代码控制这些,可参看http://support.microsoft.com/kb/262110/zh-cn

是VB写的,我VB忘得差不多了,有空再去转换为VC!

也难怪是Visual Basic写的,比尔盖茨当年豪气冲天,说:"我敢以BASIC挑战任何人,也欢迎任何人以BASIC来挑战我!"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: