文本标签
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风格,该风格导致文本标签显示在按钮右边。对于在标签旁边显示一个下拉列表或者按钮被一个子窗口覆盖时,该风格是很有用的。
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风格,该风格导致文本标签显示在按钮右边。对于在标签旁边显示一个下拉列表或者按钮被一个子窗口覆盖时,该风格是很有用的。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货