前一段时间报选修,相信大家对学校的管理系统都很熟悉,应该也会注意到在进入系统后要点击选修课会强制弹出一个窗口,而不是在原来的基础上转接,我就想研究一下浏览器的标签功能的实现。
要实现标签的功能,首先想到的应该就是SStab控件,这也是好多人都选取的。用它来做选项标签页很容易,可是用来做浏览器的标签就会很费力。sstab的每一个tab页都相当于一个容器,可以把webBrowser控件放到里面,这样就基本可以实现一个标签页的共能。可是浏览器的标签不是固定的,那么就只好随用随生成。在webBrowser的newwindow事件发生前加载一个新的标签:
Private Sub WebBrowser_BeforeNavigate2(Index As Integer, ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, - PostData As Variant, Headers As Variant, Cancel As Boolean) SSTab1.Tabs = SSTab1.Tabs + 1 '增加一个窗口 SSTab1.TabsPerRow = SSTab1.TabsPerRow + 1 SSTab1.TabCaption(SSTab1.Tabs - 1) = "新建窗口..." SSTab1.Tab=SSTab1.Tabs - 1 '新增窗口为当前标签 '加载新的WebBrowser控件并放在新的选项卡上 Load Web1(Web1.UBound+1) Set Web1(Web1.UBound).Container=SSTab1 Web1(Web1.UBound).Visible=True Web1(Web1.UBound).Left=0 Web1(Web1.UBound).Top=0 '获得URL '………… ' …… End sub
不过每次这样加载肯定效率不好。还有一种方法,就是利用一个Form做标签,因为Form本身就是一个容器,自然也就可以胜任这个工作。这里利用了MDI窗体和Form的MDiChild属性,这样和SStab的样式也就差不多了。具体操作:建好一个MDI主窗体Formmain,在另外建一个窗体FormBrowser并且添加上WebBrowser控件,设置好MDIChild 属性,把整个FormBrowser看作一个类,调用的时候直接生成即可。
'主窗体formmain Private Sub MDIForm_Load() Dim newWeb As frmWebBrowser '定义变量 Set newWeb = NewPage("http://www.baidu.com") '实例化 newWeb.WindowState = 2 End Sub '定义一个新建标签的过程 Public Function NewPage(strUrl As String) As frmWebBrowser Dim newWeb As frmWebBrowser Set newWeb = New frmWebBrowser newWeb.Show newWeb.WebBrowser1.Navigate strUrl Set NewPage = newWeb End Function '子窗体FrmWebBroeser Public m_URL as string Private Sub Form_Activate() frmMain.ActiveHwnd = Me.hWnd '获得进程句柄 If frmMain.isEditUrl = False Then frmMain.Text1.Text = m_URL Set frmMain.ActiveWeb = WebBrowser1 End Sub '获得导航链接 Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean) m_URL = URL If frmMain.ActiveHwnd = Me.hWnd And frmMain.isEditUrl = False Then frmMain.Text1.Text = m_URL End If End Sub这样理论上就基本实现了自动标签链接之间的转换。在实现的时候很容易自动调出IE而不是切换到下一个标签,看来还得要强制一下。
不过这个的原理基本就是在下一个标签的时候导航了一个URL,太简单了。对于像学校信息管理系统那样的网络肯定是不行的,因为下一个界面的进入是在上一个的基础之上的,且每个人都是有密码信息,不能直接以URl访问,这样就是一个个加密的资源的交互,以后再研究。