VC编程实现IE风格的界面

李可可520

李可可520

2016-02-19 14:28

今天图老师小编给大家介绍下VC编程实现IE风格的界面,平时喜欢VC编程实现IE风格的界面的朋友赶紧收藏起来吧!记得点赞哦~

  使用过IE浏览器的朋友都知道IE界面上的扁平工具条、地址栏,扁平工具栏上的按钮正常状态下为扁平态,按钮上的图像为灰色,当鼠标放在按钮上时,按钮突起(这种状态称为手柄),并且其上的图像变得鲜艳醒目,一些按钮上还有汉字说明或标有小黑三角的下拉按钮,单击时显示下拉菜单,这些技术是怎么实现的呢,本文针对这些问题介绍了如何利用VC编程来实现它们。

  IE风格的实现主要在主框架类的CMainFrame::OnCreate()实现,它的主要思想如下:首先定义一个CReBar对象,用以作工具条、地址栏的容器,然后分别声明图像列表对象img用于存储工具栏上按钮的热点图像和正常状态下显示的图像。为了显示扁平工具栏,需要用CreateEx()函数创建CToolBar对象m_wndToolBar,用ModifyStyle()函数将工具栏的风格设为扁平类型,你不能用CToolBar::Create() 或 CToolBar:: SetBarStyle()设置这种新风格。CToolBar 类不支持TBSTYLE_FLAT。要解决这个问题,必须绕过CToolBar类,使用CWnd::ModifyStyle()。工具栏对象调用SetButtonInfo()设置按钮的风格为TBSTYLE_DROPDOWN,就可以将工具栏按钮设置为附带有下拉按钮。至于按钮带有中文提示,用工具栏的SetButtonText()就可以轻松实现了。下面是实现IE风格界面的部分代码和注释:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 CReBar m_wndReBar;//声明CReBar对象
 CImageList img;//声明图像列表对象
 CString str;
 if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  return -1;
 if (!m_wndReBar.Create(this))//创建CReBar对象
 {
  TRACE0("Failed to create rebar");
  return -1; // fail to create
 }
 if (!m_wndToolBar.CreateEx(this))//创建工具条对象
 {
  TRACE0("Failed to create toolbar");
  return -1; // fail to create
 }
 // set up toolbar properties
 m_wndToolBar.GetToolBarCtrl().SetButtonWidth(50, 150);
 file://设置工具条上按钮的最大、最小尺寸
 m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
 file://工具条可以带有下拉按钮
 img.Create(IDB_HOTTOOLBAR, 22, 0, RGB(255, 0, 255));
 file://向图像列表装载热点图像资源,IDB_HOTTOOLBAR为热点图像资源ID
 m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);//工具条装载热点图像
 img.Detach();
 img.Create(IDB_COLDTOOLBAR, 22, 0, RGB(255, 0, 255));
 file://图象列表装载正常状态的图像资源,IDB_COLDTOOLBAR为图像资源ID
 m_wndToolBar.GetToolBarCtrl().SetImageList(&img);//将图像装入工具条
 img.Detach();
 m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT);
 file://工具条为扁平风格
 m_wndToolBar.SetButtons(NULL, 9);//工具条上有9个按钮
 // set up each toolbar button

 file://以下分别对九个按钮分别设置风格和按钮汉语提示
 m_wndToolBar.SetButtonInfo(0, ID_BUTTON0, TBSTYLE_BUTTON, 0);
 str.LoadString(IDS_ BUTTON0);
 m_wndToolBar.SetButtonText(0, str);
 m_wndToolBar.SetButtonInfo(1, ID_BUTTON1, TBSTYLE_BUTTON, 1);
 str.LoadString(IDS_ BUTTON1);
 m_wndToolBar.SetButtonText(1, str);
 m_wndToolBar.SetButtonInfo(2, ID_BUTTON2, TBSTYLE_BUTTON, 2);
 str.LoadString(IDS_ BUTTON2);
 m_wndToolBar.SetButtonText(2, str);
 m_wndToolBar.SetButtonInfo(3, ID_BUTTON3, TBSTYLE_BUTTON, 3);
 str.LoadString(IDS_ BUTTON3);
 m_wndToolBar.SetButtonText(3, str);
 m_wndToolBar.SetButtonInfo(4, ID_BUTTON4, TBSTYLE_BUTTON, 4);
 str.LoadString(IDS_ BUTTON4);
 m_wndToolBar.SetButtonText(4, str);
 m_wndToolBar.SetButtonInfo(5, ID_BUTTON5, TBSTYLE_BUTTON, 5);
 str.LoadString(IDS_ BUTTON5);
 m_wndToolBar.SetButtonText(5, str);
 m_wndToolBar.SetButtonInfo(6, ID_BUTTON6, TBSTYLE_BUTTON | TBSTYLE_DROPDOWN, 6);
 str.LoadString(IDS_ BUTTON6);
 m_wndToolBar.SetButtonText(6, str);
 m_wndToolBar.SetButtonInfo(7, ID_BUTTON7, TBSTYLE_BUTTON, 7);
 str.LoadString(IDS_ BUTTON7);

m_wndToolBar.SetButtonText(7, str);
 m_wndToolBar.SetButtonInfo(8,ID_BUTTON8, TBSTYLE_BUTTON | TBSTYLE_DROPDOWN, 8);
 str.LoadString(IDS_ BUTTON8);
 m_wndToolBar.SetButtonText(8, str);
 file://重新调整按钮的尺寸
 CRect rectToolBar;
 m_wndToolBar.GetItemRect(0, &rectToolBar);//得到工具条第一个按钮的尺寸
 m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(30,20));
 file://第一个参数为按钮尺寸,第二个参数为图像尺寸
 file://创建一个组合框作为地址栏
 if (!m_wndAddress.Create(CBS_DROPDOWN | WS_CHILD, CRect(0, 0, 200, 120), this, AFX_IDW_TOOLBAR + 1))
 {
  TRACE0("Failed to create combobox");
  return -1; // fail to create
 }
 file://加入工具栏、地址栏
 m_wndReBar.AddBar(&m_wndToolBar);
 str.LoadString(IDS_ADDRESS);
 m_wndReBar.AddBar(&m_wndAddress, str, NULL, RBBS_FIXEDBMP | RBBS_BREAK);
file://定义REBARBANDINFO对象,对工具条和地址栏设置理想尺寸
 REBARBANDINFO rbbi;
 rbbi.cbSize = sizeof(rbbi);
 rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE;
 rbbi.cxMinChild = rectToolBar.Width();
 rbbi.cyMinChild = rectToolBar.Height();
 rbbi.cx = rbbi.cxIdeal = rectToolBar.Width() * 9;
 m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi);//设置工具栏尺寸
 rbbi.cxMinChild = 0;
 CRect rectAddress;
 rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE;
 m_wndAddress.GetEditCtrl()-GetWindowRect(&rectAddress);
 rbbi.cyMinChild = rectAddress.Height() + 10;
 rbbi.cxIdeal = 200;
 m_wndReBar.GetReBarCtrl().SetBandInfo(2, &rbbi);//设置地址栏尺寸
 m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
 CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);
 if (!m_wndStatusBar.Create(this) ||
  !m_wndStatusBar.SetIndicators(indicators,
  sizeof(indicators)/sizeof(UINT)))
  {
   TRACE0("Failed to create status bar");
   return -1; // fail to create
  }
  return 0;
 }

  以上代码在Windows2000和Visual C++环境下编译通过,程序运行正常,有兴趣的朋友可以动手亲自实验一下。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

VC编程实现IE风格的界面

编程语言 网络编程
VC编程实现IE风格的界面

VC界面的实现

C语言教程 C语言函数
VC界面的实现

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

轻松实现类VC界面

C语言教程 C语言函数
轻松实现类VC界面

VC编程中如何在界面上实现3D文字

编程语言 网络编程
VC编程中如何在界面上实现3D文字

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

VC模拟实现QQ界面(下)

编程语言 网络编程
VC模拟实现QQ界面(下)

VC模拟实现QQ界面(上)

编程语言 网络编程
VC模拟实现QQ界面(上)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何更新Windows优化大师

如何更新Windows优化大师

用VC6编写注册表管理程序

用VC6编写注册表管理程序
下拉加载更多内容 ↓