VisualC 版本6中工具条的新特色(续)

2008-04-09 04:08:33来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

p>文本标签

  Internet Explorer使得普通的工具条具有了大按钮和取代了文本提示的文本标签。MFC程序员可以通过SetButtonText()函数为每个按钮设置一个文本串来获得这种效果。虽然在Visual C 5.0中已包含了这个函数,但如果不使用扁平钮风格则不会取得令人满意的效果。

  表3显示了如何使用现有的文本提示作为按钮的标签,而且图3和图4显示了将工具条分别定位在顶端和右边的效果。我仍然使得文本提示有效,但你可以通过在调用SetBarStyle()时去掉CBRS_TOOLTIPS风格而使之无效。 

表 3: Adding text labels
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if(CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
  return -1;

if(!m_wndToolBar.CreateEx(this)||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  {
   TRACE0("Failed to create toolbar\n");
   return -1; // fail to create
  }

if(!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)))
  {
   TRACE0("Failed to create status bar\n");
   return -1; // fail to create
  }

// TODO: Remove this if you dont want tool tips or a resizeable toolbar
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_GRIPPER | CBRS_BORDER_3D | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

// Add text to each button
for(int i = 0; i $#@60; m_wndToolBar.GetCount(); i )
{ UINT id = m_wndToolBar.GetItemID(i);
CString s;
if(!s.LoadString(id)) continue;
int j = s.Find(_T(\n));
if(j $#@60; 0) continue;
s = s.Right(s.GetLength() - j - 1);
m_wndToolBar.SetButtonText(i,s); }// Adjust sizes to include text
CRect rect;
m_wndToolBar.GetItemRect(0,&rect);
m_wndToolBar.SetSizes(rect.Size(),CSize(16,15));// TODO: Delete these three lines if you dont want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
Do ontrolBar(&m_wndToolBar);
return 0;
}
图4


  为了产生按钮标签,一个简单的for循环扫过所有的按钮并且从与之相连的帮助串中提取出提示文本。在设置完每个按钮的标签后,就调用工具条的SetSizes()函数去重新计算工具条的外观以便使得标签可见。也许会有更好的方法去实现最后一步,但我还是从微软的MFCIE范例程序中借用了这个过程,不为别的,只为它确实有效。

  从很多方面来说,MFCIE都是值得仔细学习的。从本质上来说,它实际上是Internet Explorer的一个微型版本,并且它还阐述了如何使用版本6的一些新特色。你将会惊讶于在你的MFC应用程序中添加HTML浏览功能是如此之简单。

  在绝大多数情况下你会希望文本标签显示在按钮下面(这在最初的公用控件库中是唯一的选择)。Internet Explorer 3.0版加入了TBSTYLE_LIST风格,该风格导致文本标签显示在按钮右边。对于在标签旁边显示一个下拉列表或者按钮被一个子窗口覆盖时,该风格是很有用的。

下拉列表

  在“工具条的变形”一文中,我演示了通过将一个组合框作为一个子窗口来在工具条上添加下拉列表的情形。该方法在版本6中仍然有效,并且当你想在工具条上显示当前的可选择项时它仍然是有用的。然而,有时你希望工具条包含一个可以在鼠标点击时显示选择列表或菜单的按钮。该功能现在可以通过扩展风格TBSTYLE_DROPDOWN和
TBSTYLE_EX_DRAWDDARROWS实现了。

  例如,假设我希望对应于“文件”菜单下“新建”的按钮可以显示一个我的应用程序知道如何去创建的所有文件类型的列表。表4 显示在前面的例子中如何加入该功能,而图5显示该工具条。我抓取了鼠标停留在该按钮上时的屏幕,它显示出了按钮和下拉箭头之间的分隔线。

  为了加入一个下拉箭头,首先我必须在基本的工具条控件上调用SetExtendedStyle()函数,并且指定TBSTYLE_EX_DRAWDDARROWS风格。然后我必须在每一个我想要显示下拉箭头的按钮上指定TBSTYLE_DROPDOWN风格。

表 4: Converting the File menu New command to a drop-down button
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if(CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
  return -1;

if(!m_wndToolBar.CreateEx(this)||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  {
   TRACE0("Failed to create toolbar\n");
   return -1; // fail to create
  }

if(!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)))
  {
   TRACE0("Failed to create status bar\n");
   return -1; // fail to create
  }

// TODO: Remove this if you dont want tool tips or a resizeable toolbar
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_GRIPPER | CBRS_BORDER_3D | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

// Add text to each button
for(int i = 0; i
图5

  当用户在New按钮上点击时,就象图5所示一样,基本的按钮操作就发生了。在这个例子中命令消息导致调用CWinApp::OnFileNew()。然而,当用户点击下拉箭头时,工具条就发出TBN_DROPDOWN通知消息给工具条的父窗口。我可以通过重载OnNotify()函数或者通过在消息映射中加入一个ON_NOTIFY而获取这个消息。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:VisualC 版本6中工具条的新特色

下一篇:使用InstallShieldforVC