Click here to Skip to main content
15,886,362 members
Articles / Desktop Programming / MFC

Automatic Tab Bar for MDI Frameworks

Rate me:
Please Sign up or sign in to vote.
4.80/5 (14 votes)
3 Jan 2003Public Domain 245.3K   5.8K   82  
A dockable bar containing a tabbed list of open windows
// DemoPropertyPage.cpp : implementation file
//

#include "stdafx.h"
#include "resource.h"
#include "DemoPropertyPage.h"

#include "WindowManager.h"
#include "ViewManager.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_DYNCREATE(CDemoPropertyPage1, CPropertyPage)
IMPLEMENT_DYNCREATE(CDemoPropertyPage2, CPropertyPage)

				  //m_wndViewManager
/////////////////////////////////////////////////////////////////////////////
// CDemoPropertyPage1 property page

CDemoPropertyPage1::CDemoPropertyPage1() : CPropertyPage(CDemoPropertyPage1::IDD)
{
	CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
	m_pViewManager     = pFrame->m_MDIClient.GetViewManager();
	DWORD dwStyle      = m_pViewManager->m_ViewTabCtrl.GetStyle();
	BOOL bButtons      = dwStyle & TCS_BUTTONS;
	BOOL bFlatButtons  = dwStyle & TCS_FLATBUTTONS;
	//{{AFX_DATA_INIT(CDemoPropertyPage1)
	m_nButType     = bButtons ? 1 : 0;
	m_bFlatButtons = bFlatButtons;
	m_bDispIcons = FALSE;
	//}}AFX_DATA_INIT
}

CDemoPropertyPage1::~CDemoPropertyPage1()
{
}

void CDemoPropertyPage1::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDemoPropertyPage1)
	DDX_Radio(pDX, IDC_NORMAL, m_nButType);
	DDX_Check(pDX, IDC_FLAT, m_bFlatButtons);
	DDX_Check(pDX, IDC_DISP_ICONS, m_bDispIcons);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDemoPropertyPage1, CPropertyPage)
	//{{AFX_MSG_MAP(CDemoPropertyPage1)
	ON_BN_CLICKED(IDC_ACTIVE, OnActiveTabFont)
	ON_BN_CLICKED(IDC_INACTIVE, OnInactiveTabFont)
	ON_BN_CLICKED(IDC_MODIFIED, OnModifiedColor)
	ON_BN_CLICKED(IDC_SELECTED, OnSelectedColor)
	ON_BN_CLICKED(IDC_UNSELECTED, OnUnselectedColor)
	ON_BN_CLICKED(IDC_BUTTONS, OnButtons)
	ON_BN_CLICKED(IDC_FLAT, OnFlat)
	ON_BN_CLICKED(IDC_NORMAL, OnNormal)
	ON_BN_CLICKED(IDC_DISP_ICONS, OnDispIcons)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CDemoPropertyPage1::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	// TODO: Add extra initialization here
	GetDlgItem(IDC_FLAT)->EnableWindow(m_nButType);
	CButton* pBut = (CButton*)GetDlgItem(IDC_FLAT);
	pBut->SetCheck(m_bFlatButtons);
	m_bDispIcons = m_pViewManager->m_ViewTabCtrl.GetIconDisplay();

	UpdateData(FALSE);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDemoPropertyPage1::OnActiveTabFont() 
{
	CFont* pFont = m_pViewManager->m_ViewTabCtrl.GetTabFont(TRUE);
	LOGFONT lf;
	memset(&lf, 0, sizeof(LOGFONT));
	pFont->GetLogFont(&lf);
	CFontDialog dlg(&lf, CF_SCREENFONTS | CF_NOSTYLESEL);
	if (dlg.DoModal() == IDOK)
	{
		dlg.GetCurrentFont(&lf);
		pFont->DeleteObject();
		pFont = new CFont();
		pFont->CreateFontIndirect(&lf);
		m_pViewManager->m_ViewTabCtrl.SetFonts(pFont, TRUE);
		delete pFont;
	}		
}

void CDemoPropertyPage1::OnInactiveTabFont() 
{
	CFont* pFont = m_pViewManager->m_ViewTabCtrl.GetTabFont(FALSE);
	LOGFONT lf;
	memset(&lf, 0, sizeof(LOGFONT));
	pFont->GetLogFont(&lf);
	CFontDialog dlg(&lf, CF_SCREENFONTS | CF_NOSTYLESEL);
	if (dlg.DoModal() == IDOK)
	{
		dlg.GetCurrentFont(&lf);
		pFont->DeleteObject();
		pFont = new CFont();
		pFont->CreateFontIndirect(&lf);
		m_pViewManager->m_ViewTabCtrl.SetFonts(pFont, FALSE);
		delete pFont;
	}		
}

void CDemoPropertyPage1::OnModifiedColor() 
{
	CColorDialog dlg(m_pViewManager->m_ViewTabCtrl.GetDocModifiedColor());
	if (dlg.DoModal() == IDOK)
		m_pViewManager->m_ViewTabCtrl.SetColors(CLR_NONE, CLR_NONE,
		dlg.m_cc.rgbResult);	
}

void CDemoPropertyPage1::OnSelectedColor() 
{
	CColorDialog dlg(m_pViewManager->m_ViewTabCtrl.GetSelColor());
	if (dlg.DoModal() == IDOK)
		m_pViewManager->m_ViewTabCtrl.SetColors(dlg.m_cc.rgbResult, 
		CLR_NONE, CLR_NONE);	
}

void CDemoPropertyPage1::OnUnselectedColor() 
{
	CColorDialog dlg(m_pViewManager->m_ViewTabCtrl.GetUnSelColor());
	if (dlg.DoModal() == IDOK)
		m_pViewManager->m_ViewTabCtrl.SetColors(CLR_NONE, 
		dlg.m_cc.rgbResult, CLR_NONE);	
}

void CDemoPropertyPage1::OnNormal() 
{
	m_pViewManager->m_ViewTabCtrl.SetTabStyle(FALSE, FALSE);
	GetDlgItem(IDC_FLAT)->EnableWindow(FALSE);
}

void CDemoPropertyPage1::OnButtons() 
{
	m_pViewManager->m_ViewTabCtrl.SetTabStyle(TRUE, FALSE);
	GetDlgItem(IDC_FLAT)->EnableWindow(TRUE);
}

void CDemoPropertyPage1::OnFlat() 
{
	UpdateData();
	ASSERT(m_nButType == 1);
	if (m_bFlatButtons)
		m_pViewManager->m_ViewTabCtrl.SetTabStyle(TRUE, TRUE);
	else
	{
		m_pViewManager->m_ViewTabCtrl.SetTabStyle(FALSE, FALSE);
		m_pViewManager->m_ViewTabCtrl.SetTabStyle(TRUE, FALSE);
	}
}

void CDemoPropertyPage1::OnDispIcons() 
{
	UpdateData();
	m_pViewManager->m_ViewTabCtrl.SetIconDisplay(m_bDispIcons);
}

/////////////////////////////////////////////////////////////////////////////
// CDemoPropertyPage2 property page

CDemoPropertyPage2::CDemoPropertyPage2() : CPropertyPage(CDemoPropertyPage2::IDD)
{
	m_pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;

	//{{AFX_DATA_INIT(CDemoPropertyPage2)
	m_strFileName = m_pFrame->m_MDIClient.GetFileName();
	m_nDispType = m_pFrame->m_MDIClient.GetDispType();
	//}}AFX_DATA_INIT

}

CDemoPropertyPage2::~CDemoPropertyPage2()
{
}

void CDemoPropertyPage2::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDemoPropertyPage2)
	DDX_Text(pDX, IDC_FILENAME, m_strFileName);
	DDX_Radio(pDX, IDC_TILE, m_nDispType);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDemoPropertyPage2, CPropertyPage)
	//{{AFX_MSG_MAP(CDemoPropertyPage2)
	ON_BN_CLICKED(IDC_BKCOLOR, OnBkcolor)
	ON_BN_CLICKED(IDC_BKFONT, OnBkfont)
	ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
	ON_BN_CLICKED(IDC_TILE, OnDisplayType)
	ON_BN_CLICKED(IDC_BACKLOGO, OnBacklogo)
	ON_BN_CLICKED(IDC_CENTER, OnDisplayType)
	ON_BN_CLICKED(IDC_STRETCH, OnDisplayType)
	ON_BN_CLICKED(IDC_DEFAULT, OnDefault)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CDemoPropertyPage2::OnBkcolor() 
{
	CColorDialog dlg(m_pFrame->m_MDIClient.GetBkColor());
	if (dlg.DoModal() == IDOK)
		m_pFrame->m_MDIClient.SetBkColor(dlg.m_cc.rgbResult);	
}

void CDemoPropertyPage2::OnBkfont() 
{
	CFont* pFont = m_pFrame->m_MDIClient.GetLogoFont();
	LOGFONT lf;
	memset(&lf, 0, sizeof(LOGFONT));
	pFont->GetLogFont(&lf);
	CFontDialog dlg(&lf, CF_SCREENFONTS | CF_NOSTYLESEL);
	if (dlg.DoModal() == IDOK)
	{
		dlg.GetCurrentFont(&lf);
		pFont->DeleteObject();
		pFont = new CFont();
		pFont->CreateFontIndirect(&lf);
		m_pFrame->m_MDIClient.SetLogoFont(pFont);
		delete pFont;
	}	
}

void CDemoPropertyPage2::OnBrowse() 
{
	CFileDialog dlg(TRUE, _T("bmp"), m_strFileName, 
                    OFN_HIDEREADONLY, 
                    _T("Bitmap Files (*.bmp)|*.bmp|All Files (*.*)|*.*||"));
   if (dlg.DoModal() == IDOK)
   {
	   m_pFrame->m_MDIClient.SetBitmap(dlg.GetPathName());
	   m_strFileName = dlg.GetPathName();
	   UpdateData(FALSE);	
   }
}

void CDemoPropertyPage2::OnDisplayType() 
{
	UpdateData();
    m_pFrame->m_MDIClient.SetDispType(CMDIClient::DispType(m_nDispType));	
}

void CDemoPropertyPage2::OnBacklogo() 
{
	CColorDialog dlg(m_pFrame->m_MDIClient.GetBkColor());
	if (dlg.DoModal() == IDOK)
		m_pFrame->m_MDIClient.SetLogoColor(dlg.m_cc.rgbResult);	
}

void CDemoPropertyPage2::OnDefault() 
{
	// TODO: Add your control notification handler code here
	m_pFrame->m_MDIClient.Defaults(TRUE, TRUE);
	
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under A Public Domain dedication


Written By
Engineer
Japan Japan
Systems Engineer

Comments and Discussions