基于CDialogBar的IE多标签栏的实现

IE浏览器的多标签模式已日趋占据浏览器市场的主流模式。回忆IE6.0时代的单文档多实例年代,那浏览多网页是何等的痛苦。原本有限的空间就要被那些烦琐的网页所占据,要从这些烦琐的网页中切换到自己目的网页更是何等的不便。现在很多第三方IE浏览器对IE浏览器所显示出来的弊病虎视眈眈许久,多标签浏览器也应运而生。遨游、世界之窗、TT等如今都是拜多标签浏览器之福,早早占领了市场,占据了一席之地。而如今微软也知道自己浏览器帝国的根基也岌岌可危,其怎可示弱,IE7.0也就相继问世。

IE多标签栏的主要特点是:单实例多文档模式,文档间的切换是通过标签实现。一个实例就可以包容多个文档,察看网页是何其的方便。

构成IE多标签栏的界面要素包括工具栏和标签。工具栏采用CDialogBar做为标签的容器,标签采用自绘按钮来实现,CtabCtrl做标签不容易实现自绘(自绘的时候有灰色的border出现)。

在CDialogBar的宽度发生改变的时候,其上面的按钮标签应做适当的调整。当然在足够容纳按钮标签的时,可以给一个设定值。若空间有限的话,则就适当缩小标签的大小,其上的内容通过提示框提示。所以只要响应CdialogBar的WM_SIZE来调整标签的摆放方式。至于标签栏的自绘通过响应WM_PAINT消息就可以做到。

void CTabBar::OnSize(UINT nType, int cx, int cy)
{
  CDialogBar::OnSize(nType, cx, cy);
  CRect rcClient;
  GetClientRect(rcClient);
  int nBarWidth=rcClient.Width();
  int nTabWidth=nBarWidth-120;
  int nCount=m_ptrArray.GetCount();

  if(nCount*m_nWidth>nTabWidth)
  {
    //平均分配位置
    int nAveWidth=nTabWidth*1.0/nCount;
    for(int i=0; i<nCount; i++)
    {
      CRect rcBtn;
      TABINFO* pTabInfo=(TABINFO*)m_ptrArray.GetAt(i);
      pTabInfo->pTabButton->GetClientRect(&rcBtn);
      pTabInfo->pTabButton->MoveWindow(nAveWidth*i,
                   (rcClient.Height()-rcBtn.Height())/2,
                   nAveWidth,
                   m_nHeight,
                   FALSE);
    }
  }
  else
  {
    //固定大小
    for(int i=0; i<nCount; i++)
    {
      CRect rcBtn;
      TABINFO* pTabInfo=(TABINFO*)m_ptrArray.GetAt(i);
      pTabInfo->pTabButton->GetClientRect(&rcBtn);
      pTabInfo->pTabButton->MoveWindow(m_nWidth*i,
                 (rcClient.Height()-rcBtn.Height())/2,
                 m_nWidth, m_nHeight, FALSE);
    }
  }
  Invalidate();
}

时间: 2024-10-06 07:41:47

基于CDialogBar的IE多标签栏的实现的相关文章

如何设置IE9浏览器的标签栏更方便

internet explorer 9 已经支持众多的硬件加速,符合基于html5, css3, dom l2 和 l3, svg, ecmas cript5, 等标准的功能.. IE9浏览器默认地址栏是跟标签栏在一个栏中的,可是有的人喜欢开很多网页,然后一个一个地看,这样一来用ie9就会感觉到极大的不便,因为它 留给标签栏的空间太小了,无法显示更多的网页,让我们查找起来也不够方便.怎么才能使它像以前的版本一样将标签栏单独设置一栏呢? 方法/步骤首先打开IE9浏览器,这一过程不再赘述,你可以在桌

WeHeartPics:基于主题和时间轴展示拍摄图片

WeHeartPics是一款新推出的iOS客户端的社交网络应用,其亮点在于为用户提供一种全新的方式在Facebook和Twitter上进行图片分享.你或许还会觉得它有点像Facebook.Instagram和PicYou三者的结合体,通过把Facebook Timeline和Instagram图片筛选功能整合在一起,帮助用户实现用图片来描述自己的人生. 开发团队 WeHeartPics创始人Ilya Zudin透露,"团队一共九人,均来自俄国,大约在4个多月前开始这个项目.因为莫斯科温度太低,因

《基于MPLS的流量工程(修订版)》一2.2 转发的基本原理

2.2 转发的基本原理 基于MPLS的流量工程(修订版)表2-1通过术语和定义简单介绍了一下MPLS.这一节将会把这些概念结合起来作更深入的介绍. 2.2.1 什么是标签 如你所料,标签是多协议标签交换的一个组成部分.标签使得路由和转发可以分离,这样便于灵活地进行处理. 什么是标签?在定义标签之前,应该知道MPLS可以在两种模式下工作: 帧模式.信元模式.1.帧模式帧模式是指在分组的第三层分组头(例如IP分组头)前加入标签进行转发. RFC 3031,"多协议标签交换体系结构",定义了

jQuery基于图层模仿五星星评价功能的方法

  这篇文章主要介绍了jQuery基于图层模仿五星星评价功能的方法,使用jQuery动态修改元素背景色的方法实现星评功能,需要的朋友可以参考下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//

在应用中加入全文检索功能——基于Java的全文索引引擎Lucene简介

全文检索|索引 内容摘要: Lucene是一个基于Java的全文索引工具包. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 全文检索的实现:Luene全文索引和数据库索引的比较 中文切分词机制简介:基于词库和自动切分词算法的比较 具体的安装和使用简介:系统结构介绍和演示 Hacking Lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的扩展 从Lucene我们还可以学到什么 基于Java的全文索引/检索引擎--Lucene Lucene不是一个完整的全

基于SharpMap扩展程序开发实例

SharpMap是基于.Net平台开发的GIS地图渲染组件.在SharpMap的内部设计了基于OGC 标准的几何模型 构架,设计了IProvider策略模式的多源矢量地图数据适配器接口,地图要素渲染的底层主要通过几何变 换将Geometry转换为.Net支持的几何模型如System.Drawing.Point.System.Drawing.Rectangle. System.Drawing.Drawing2D.GraphicsPath等,然后调用System.Drawing.Graphics类的

MathType小标签栏中怎么添加符号

  MathType小标签栏中怎么添加符号 1.按照自己的使用习惯打开MathType公式编辑器,进入到公式编辑界面. 打开软件进入编辑状态 2.编辑出自己所需要的符号,比如根号2.利用MathType工具栏中的根式与分式模板中的要式模板编辑出根号2. 利用MathType的根号模板编辑出根号2 3.用鼠标选中根号2,然后拖动这个符号一直到小标签栏中,这个时候小标签栏会出现一个黑色的框,此时将鼠标松开,会发现根号2已经出现在小标签栏中了. 选中整个根号2后按住鼠标不动拖动到小标签栏中      

MathType小标签栏中的符号怎么不见了

  MathType小标签栏中的符号怎么不见了?下面就介绍MathType小标签栏消失的解决方法. 小标签栏显示示例: 小标签栏消失示例: 具体操作如下: 1.打开MathType公式编辑器这个软件,进入到编辑界面,打开方式根据自己的习惯就可以,不固定某一种方式. 2.打开MathType后,点击MathType菜单中的"视图"--"小标签栏"命令,在点击之前你会发现这个命令前面是没有蓝色的勾的. 点击"视图"--"小标签栏"

基于阿里云上实现全站https的正确姿势(一)

一些重要的互联网资源参考: 强烈建议通读一下Jerry Qu的关于https, http/2, nginx的blog, 这是我目前发现的在国内的技术文章中, 关于上述的几个知识点讲解的最为全面透彻的文章. 传送门: https://imququ.com/ 为什么我们需要实现全站https? 目前主流大厂的网站和服务都已经实现了全站https, 例如: baidu, taobao, jd等. 关于这方面的好处和优势, 互联网上太多文章在进行介绍. 例如: 为什么我们应该尽快升级到 HTTPS? 对