2012-01-20 27 views
4

私はVS2005とMFCを使用しています。私はツールバーに静的なテキストを追加するためにいくつかのコードをオンラインで続けました。しかし、スタイルをTBSTYLE_FLATまたは(TBSTYLE_FLAT | TBSTYLE_TRANSPARENT)に設定すると、区切り文字が表示され、テキストの上にちょっと目立つように見えます。 CToolBarに静的テキストを表示したり、テキストの後ろにセパレータを表示しないようにするより良い方法はありますか?ありがとう!TBSTYLE_FLATを使用してMFC CToolBarで静的テキストを正しく表示する方法

おそらく

screenshot

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; 
} 
+1

オンラインで見つかったコードが正しくありません。ツールバーに静的なコントロールを追加するだけです。ツールバーはそのことを知らず、その存在を説明しません。 –

答えて

1

あなたのために遅すぎるが、MFCに付属しているTabControlの例には、それを行う方法を示します。基本的に、あなたはCMFCToolBarButtonとCONSORTS使用するのと同じ方法で、CToolbarLabel(それはあなたのためのサンプルで実装されている)と呼ばれるクラスを使用します。

ヘッダー:完全性については

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, const CRect& rect, CMFCToolBarImages* pImages, 
           BOOL bHorz, BOOL /*bCustomizeMode*/, BOOL /*bHighlight*/, 
           BOOL /*bDrawBorder*/, BOOL /*bGrayDisabledButtons*/) 
{ 
    UINT nStyle = m_nStyle; 
    m_nStyle &= ~TBBS_DISABLED; 

    CMFCToolBarButton::OnDraw (pDC, rect, pImages, bHorz, FALSE, 
           FALSE, FALSE, FALSE); 

    m_nStyle = nStyle; 
} 

非常に軽くてボタンがすでに提供しているものだけを使用するので、ビジュアルテーマにも使用できます。

関連する問題