我正在使用VS2005和MFC.我在线跟踪了一些代码,用于在工具栏中添加静态文本.但是,如果样式设置为TBSTYLE_FLAT或(TBSTYLE_FLAT | TBSTYLE_TRANSPARENT),则分隔符将变为可见,并且看起来像文本上方的一个小刻度标记.有没有更好的方法在CToolBar上显示静态文本或在文本后面使分隔符不可见?谢谢!
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT | TBSTYLE_TRANSPARENT,WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } //Create Static Text CRect rect; int nIndex = m_wndToolBar.GetToolBarCtrl().CommandToIndex(ID_STATIC_TEST); m_wndToolBar.SetButtonInfo(nIndex,ID_STATIC_TEST,TBBS_SEPARATOR,40); m_wndToolBar.GetToolBarCtrl().GetItemRect(nIndex,&rect); rect.top = 5; rect.right = rect.left + 50; if(!m_static.Create("Test",WS_CHILD | WS_VISIBLE | SS_CENTER,rect,&m_wndToolBar)) { TRACE(_T("Failed to create Static Text\n")); return FALSE; } // 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; }
解决方法
对你来说可能为时已晚,但MFC附带的TabControl示例向您展示了如何做到这一点.基本上,您使用一个名为CToolbarLabel的类(在示例中为您实现)与使用CMFCToolBarButton和consorts的方式相同:
m_wndToolBar.ReplaceButton(ID_LABEL,CToolbarLabel(ID_LABEL,L"Some label: "));
为了完整起见,这里是CToolbarLabel的实现:
标题:
#pragma once class CToolbarLabel : public CMFCToolBarButton { DECLARE_SERIAL(CToolbarLabel) public: CToolbarLabel (UINT nID = 0,LPCTSTR lpszText = NULL); virtual void OnDraw (CDC* pDC,const CRect& rect,CMFCToolBarImages* pImages,BOOL bHorz = TRUE,BOOL bCustomizeMode = FALSE,BOOL bHighlight = FALSE,BOOL bDrawBorder = TRUE,BOOL bGrayDisabledButtons = TRUE); };
实施文件:
#include "stdafx.h" #include "ToolbarLabel.h" IMPLEMENT_SERIAL(CToolbarLabel,CMFCToolBarButton,1) CToolbarLabel::CToolbarLabel (UINT nID,LPCTSTR lpszText) { if (lpszText != NULL) { m_strText = lpszText; } m_bText = TRUE; m_nID = nID; m_iImage = -1; } void CToolbarLabel::OnDraw (CDC* pDC,BOOL bHorz,BOOL /*bCustomizeMode*/,BOOL /*bHighlight*/,BOOL /*bDrawBorder*/,BOOL /*bGrayDisabledButtons*/) { UINT nStyle = m_nStyle; m_nStyle &= ~TBBS_DISABLED; CMFCToolBarButton::OnDraw (pDC,pImages,bHorz,FALSE,FALSE); m_nStyle = nStyle; }
正如您所看到的那样,它非常轻巧,只使用按钮已经提供的内容,因此它也适用于视觉主题.