/****************************************************************************/
/* SftTabs/DLL 6.0 - Tab Control for C/C++ */
/* SftTabs/DLL 6.0 - Itanium Edition */
/* SftTabs/DLL 6.0 - x64 Edition */
/* SftTabs/DLL 6.0 - Windows Mobile Edition */
/* Copyright (C) 1994, 2009 Softel vdm, Inc. All Rights Reserved. */
/****************************************************************************/
#include "stdafx.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/*- Tab Control Initialization Data --------------------------------------------*/
static const SFTTABS_CONTROL CtlInit = {
SFTTABSSTYLE_MODERN_I, /* tab style */
1, /* number of rows */
0, /* number of tabs per row (if fFixed) */
0, /* width of left margin */
0, /* width of right margin */
FALSE, /* same width for all tabs */
TRUE, /* Client area wanted */
FALSE, /* allow multiline label text */
TRUE, /* use with dialog */
FALSE, /* use specified background color only for text */
FALSE, /* scrollable tabs */
FALSE, /* hide scroll buttons */
TRUE, /* bold font for active tab wanted */
FALSE, /* fill rows completely */
NULL, /* scroll button bitmap */
NULL, /* Dialog data associated with active tab */
NULL, /* Dialog window handle associated with active tab */
NULL, /* Frame, used as client area */
TRUE, /* Tooltips wanted */
FALSE, /* drop text if it doesn't fit */
FALSE, /* conditional scroll buttons */
BMBUTTONSTYLE_THEME_SCROLL2, /* scroll button style */
TRUE, /* display ... if truncated */
TRUE, /* Flyby highlighting */
TRUE, /* use client area colors in partially obscured frames */
FALSE, /* scroll buttons on left side */
-1, /* row indentation */
FALSE, /* don't show truncated pattern for clipped tab */
FALSE, /* full size scroll buttons */
TRUE, /* use themes on Windows XP */
FALSE, /* use exact window region */
FALSE, /* always show prefix _ */
0,0,0,0, /* animation values */
NULL, /* disabled button bitmap */
TRUE, /* focus rectangle if the control has i/p focus */
FALSE, /* TRUE if Close button wanted */
FALSE, /* TRUE if Close button disabled */
TRUE, /* TRUE if WM_CLOSE message wanted */
FALSE, /* TRUE if Minimize, Restore, Close buttons are full size */
SFTTABS_BUTTON_NEAR, /* scroll button alignment */
SFTTABS_BUTTON_NEAR, /* Minimize, Restore, Close button alignment */
FALSE, /* TRUE if Minimize button wanted */
FALSE, /* TRUE if Minimize button disabled */
FALSE, /* TRUE if Restore button wanted */
FALSE, /* TRUE if Restore button disabled */
NULL, /* Close, Minimize, Restore button bitmap */
NULL, /* Close, Minimize, Restore disabled button bitmap */
TEXT("Scroll Left/Up"), /* scroll left button tooltip */
TEXT("Scroll Right/Down"), /* scroll button tooltip */
TEXT("Close"), /* Close button tooltip */
TEXT("Minimize"), /* Minimize button tooltip */
TEXT("Restore"), /* Restore button tooltip */
0, /* custom modifications */
0, /* forced height/width depending on tab style - 0 to ignore */
FALSE, /* switch tabs on button release (or down if FALSE) */
FALSE, /* Rendering compatible with pre-6.0 */
FALSE, /* don't display clientarea border - select styles only */
};
static const SFTTABS_TAB Tab0 = { /*&GDI+ Images */
SFTTABS_NOCOLOR, SFTTABS_NOCOLOR, /* background, foreground color */
SFTTABS_NOCOLOR, SFTTABS_NOCOLOR, /* background, foreground color (when selected) */
{ SFTTABS_GRAPH_LEFT, 0 }, /* location */
TRUE, /* enabled/disabled */
0, /* userdata */
0, /* reserved */
NULL, /* reserved */
SFTTABS_NOCOLOR, /* Flyby foreground color */
SFTTABS_NOCOLOR, /* Client area background color */
0,0,0,0, /* animation values */
NULL, /* tab-specific ImageList handle*/
FALSE, /* hidden tab */
SFTTABS_NOCOLOR, /* gradient fill background color */
SFTTABS_NOCOLOR,
SFTTABS_NOCOLOR, /* gradient fill background color, active tab */
SFTTABS_NOCOLOR,
SFTTABS_NOCOLOR, /* gradient fill client area color */
SFTTABS_NOCOLOR,
};
static const SFTTABS_TAB Tab1 = { /*Other &Images */
SFTTABS_NOCOLOR, SFTTABS_NOCOLOR, /* background, foreground color */
SFTTABS_NOCOLOR, SFTTABS_NOCOLOR, /* background, foreground color (when selected) */
{ SFTTABS_GRAPH_NONE, 0 }, /* location */
TRUE, /* enabled/disabled */
0, /* userdata */
0, /* reserved */
NULL, /* reserved */
SFTTABS_NOCOLOR, /* Flyby foreground color */
SFTTABS_NOCOLOR, /* Client area background color */
0,0,0,0, /* animation values */
NULL, /* tab-specific ImageList handle*/
FALSE, /* hidden tab */
SFTTABS_NOCOLOR, /* gradient fill background color */
SFTTABS_NOCOLOR,
SFTTABS_NOCOLOR, /* gradient fill background color, active tab */
SFTTABS_NOCOLOR,
SFTTABS_NOCOLOR, /* gradient fill client area color */
SFTTABS_NOCOLOR,
};
static const SFTTABS_TAB Tab2 = { /*Other Tab &Styles */
SFTTABS_NOCOLOR, SFTTABS_NOCOLOR, /* background, foreground color */
SFTTABS_NOCOLOR, SFTTABS_NOCOLOR, /* background, foreground color (when selected) */
{ SFTTABS_GRAPH_NONE, 0 }, /* location */
TRUE, /* enabled/disabled */
0, /* userdata */
0, /* reserved */
NULL, /* reserved */
SFTTABS_NOCOLOR, /* Flyby foreground color */
SFTTABS_NOCOLOR, /* Client area background color */
0,0,0,0, /* animation values */
NULL, /* tab-specific ImageList handle*/
FALSE, /* hidden tab */
SFTTABS_NOCOLOR, /* gradient fill background color */
SFTTABS_NOCOLOR,
SFTTABS_NOCOLOR, /* gradient fill background color, active tab */
SFTTABS_NOCOLOR,
SFTTABS_NOCOLOR, /* gradient fill client area color */
SFTTABS_NOCOLOR,
};
/////////////////////////////////////////////////////////////////////////////
// CMainDlg dialog
CMainDlg::CMainDlg(CWnd* pParent /*=NULL*/)
: CSftTabsDialog(CMainDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMainDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Get the required bitmaps, icons
m_SampleBitmap.LoadBitmap(IDB_SMILE);/* Load bitmap */
m_hIcon = AfxGetApp()->LoadIcon(1);
m_hSampleIcon = AfxGetApp()->LoadIcon(IDI_ICON);
m_ImgList.Create(IDB_TOOLBAR, 16, 0, RGB(255,0,0));
m_GDIPlusImage = (Gdiplus::Image*)SftTabs_LoadGDIPlusImageFromResource(AfxGetApp()->m_hInstance, TEXT("PNG"), MAKEINTRESOURCE(IDR_IMAGE));
m_GDIPlusImageHot = (Gdiplus::Image*)SftTabs_LoadGDIPlusImageFromResource(AfxGetApp()->m_hInstance, TEXT("PNG"), MAKEINTRESOURCE(IDR_IMAGE_HOT));
m_GDIPlusImageDisabled = (Gdiplus::Image*)SftTabs_LoadGDIPlusImageFromResource(AfxGetApp()->m_hInstance, TEXT("PNG"), MAKEINTRESOURCE(IDR_IMAGE_DISABLED));
}
CMainDlg::~CMainDlg()
{
if (m_GDIPlusImage) delete m_GDIPlusImage;
if (m_GDIPlusImageHot) delete m_GDIPlusImageHot;
if (m_GDIPlusImageDisabled) delete m_GDIPlusImageDisabled;
}
void CMainDlg::DoDataExchange(CDataExchange* pDX)
{
CSftTabsDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMainDlg)
DDX_Control(pDX, IDC_NEXT, m_CtlNext);
DDX_Control(pDX, IDC_BACK, m_CtlBack);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMainDlg, CSftTabsDialog)
//{{AFX_MSG_MAP(CMainDlg)
ON_BN_CLICKED(IDC_BACK, OnBack)
ON_BN_CLICKED(IDC_NEXT, OnNext)
//}}AFX_MSG_MAP
ON_SFTTABSN_SWITCHED(IDC_TAB, OnTabSwitched)
ON_SFTTABSN_LBUTTONDOWN_IMAGE(IDC_TAB, OnTabImageClicked)
ON_SFTTABSN_LBUTTONDBLCLK_IMAGE(IDC_TAB, OnTabImageDblClicked)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMainDlg message handlers
BOOL CMainDlg::OnInitDialog()
{
CSftTabsDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
int index;
SFTTABS_TAB Tab;
/* Associate the tab control created from the dialog */
/* resource with the C++ object. */
m_Tab.SubclassDlgItem(IDC_TAB, this /* parent window */);
/* You could use DDX/DDV instead and add the following */
/* line to the DoDataExchange function of the tab */
/* control's parent window (remove the //). */
// DDX_Control(pDX, IDC_TAB, m_Tab);
/* Initialization is faster if we set redraw off */
m_Tab.SetRedraw(FALSE);
/* We are using new features */
m_Tab.SetVersion(SFTTABS_6_0);
index = m_Tab.AddTab(_T("&GDI+ Images"));
Tab = Tab0;
Sft_SetPictureGDIPlusImage(&Tab.TabPicture, m_GDIPlusImage);
Sft_SetPictureGDIPlusImage(&Tab.TabPictureHot, m_GDIPlusImageHot);
Sft_SetPictureGDIPlusImage(&Tab.TabPictureDisabled, m_GDIPlusImageDisabled);
m_Tab.SetTabInfo(index, &Tab);
m_Tab.SetTabDialog(index, new CPage1(this)); /* tab page */
index = m_Tab.AddTab(_T("Other &Images"));
Tab = Tab1;
m_Tab.SetTabInfo(index, &Tab);
m_Tab.SetTabDialog(index, new CPage2(this)); /* tab page */
index = m_Tab.AddTab(_T("Other Tab &Styles"));
m_Tab.SetTabInfo(index, &Tab2);
m_Tab.SetTabDialog(index, new CPage3(this)); /* tab page */
m_Tab.SetControlInfo(&CtlInit);
// Make sure to turn redraw back on
m_Tab.SetRedraw(TRUE);
m_Tab.InvalidateRect(NULL, TRUE);
// If you are not using the sheet/page classes, remove the call to InitializeTabControl.
// Initialize tab control
InitializeTabControl(0, &m_Tab, NULL);
return FALSE; // if this is a dialog's OnInitDialog member function
}
void CMainDlg::OnTabSwitched( )
{
int currTab;
BOOL fNext = TRUE, fBack = TRUE;
currTab = m_Tab.GetCurrentTab();
if (currTab == 0)
fBack = FALSE;
else if (currTab >= m_Tab.GetCount()-1)
fNext = FALSE;
m_CtlBack.EnableWindow(fBack);
m_CtlNext.EnableWindow(fNext);
// always enable the first tab so we can return to it
SFTTABS_TAB Tab;
m_Tab.GetTabInfo(0, &Tab);
Tab.fEnabled = TRUE;
m_Tab.SetTabInfo(0, &Tab);
}
void CMainDlg::OnTabImageDblClicked( )
{
OnTabImageClicked();
}
void CMainDlg::OnTabImageClicked()
{
int iTab = m_Tab.GetNextTab();
SFTTABS_TAB Tab;
m_Tab.GetTabInfo(iTab, &Tab); // retrieve tab information
if (Sft_IsPictureCheckBox(&Tab.TabPicture)) {
BOOL fChecked;
// it's a checkbox, so make sure to cancel this event so we don't switch tabs.
m_Tab.SendMessage(WM_CANCELMODE);
// change the checkbox state
fChecked = Tab.TabPicture.Picture.CheckBox.state;
fChecked = !fChecked;
Sft_SetPictureCheckBox(&Tab.TabPicture, fChecked, 16, 16, TRUE);
m_Tab.SetTabInfo(iTab, &Tab); // save the new tab settings
}
}
void CMainDlg::OnBack()
{
m_Tab.SwitchTab(FALSE);
}
void CMainDlg::OnNext()
{
m_Tab.SwitchTab(TRUE);
}