Click here to Skip to main content
13,249,512 members (37,013 online)
Click here to Skip to main content

Stats

217.7K views
5.4K downloads
82 bookmarked
Posted 31 Jan 2000

Automatic Tab Bar for MDI Frameworks

, 3 Jan 2003
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

Share

About the Author

Paul Selormey
Engineer
Japan Japan
Systems Engineer

You may also be interested in...

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.171114.1 | Last Updated 4 Jan 2003
Article Copyright 2000 by Paul Selormey
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid