文本标签
  
    
  
    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 don't 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 < 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 < 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   
    don't want the toolbar to
  
    // be dockable
  
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  
    EnableDocking(CBRS_ALIGN_ANY);
  
    DockControlBar(&m_wndToolBar);
  
    return 0;}
  
    
  
    
  
    
  
    
  
    
  
    
  
    
  
    图4
  
    
  
    为了产生按钮标签,一个简单的for循环扫过所有的按钮并且从与之相连的帮助串中提取出提示文本。在设置完每个按钮的标签后,就调用工具条的SetSizes()函数去重新计算工具条的外观以便使得标签可见。也许会有更好的方法去实现最后一步,但我还是从微软的MFCIE范例程序中借用了这个过程,不为别的,只为它确实有效。
  
    
  
    从很多方面来说,MFCIE都是值得仔细学习的。从本质上来说,它实际上是Internet   
    Explorer的一个微型版本,并且它还阐述了如何使用版本6的一些新特色。你将会惊讶于在你的MFC应用程序中添加HTML浏览功能是如此之简单。
  
    
  
    在绝大多数情况下你会希望文本标签显示在按钮下面(这在最初的公用控件库中是唯一的选择)。Internet   
    Explorer 3.0版加入了TBSTYLE_LIST风格,该风格导致文本标签显示在按钮右边。对于在标签旁边显示一个下拉列表或者按钮被一个子窗口覆盖时,该风格是很有用的。