www.pudn.com > StyleToolkit_demo_src.zip > StyleToolkitDlg.cpp


// StyleToolkitDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "StyleToolkit.h" 
#include "StyleToolkitDlg.h" 
 
#include "Templates.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CAboutDlg dialog used for App About 
 
class CAboutDlg : public CDialog 
{ 
public: 
	CAboutDlg(); 
 
// Dialog Data 
	//{{AFX_DATA(CAboutDlg) 
	enum { IDD = IDD_ABOUTBOX }; 
	//}}AFX_DATA 
 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CAboutDlg) 
	protected: 
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support 
	//}}AFX_VIRTUAL 
 
// Implementation 
protected: 
	//{{AFX_MSG(CAboutDlg) 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 
{ 
	//{{AFX_DATA_INIT(CAboutDlg) 
	//}}AFX_DATA_INIT 
} 
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CAboutDlg) 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 
	//{{AFX_MSG_MAP(CAboutDlg) 
		// No message handlers 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CStyleToolkitDlg dialog 
 
CStyleToolkitDlg::CStyleToolkitDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CStyleToolkitDlg::IDD, pParent) 
{ 
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
 
	m_bBackgroundsSet = FALSE; 
} 
 
void CStyleToolkitDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	DDX_Control(pDX, IDC_PROGRESS1,			m_cProgress1); 
	DDX_Control(pDX, IDC_PROGRESS2,			m_cProgress2); 
	DDX_Control(pDX, IDC_PROGRESS3,			m_cProgress3); 
	DDX_Control(pDX, IDC_PROGRESS4,			m_cProgress4); 
	DDX_Control(pDX, IDC_PSTEP1,			m_cPStep1); 
	DDX_Control(pDX, IDC_PSTEP2,			m_cPStep2); 
	DDX_Control(pDX, IDC_PSTEP3,			m_cPStep3); 
	DDX_Control(pDX, IDC_PSTEP4,			m_cPStep4); 
	DDX_Control(pDX, IDC_SHIELD,			m_cShield); 
	DDX_Control(pDX, IDC_DIVIDER1,			m_cDiv1); 
	DDX_Control(pDX, IDC_DIVIDER2,			m_cDiv2); 
	DDX_Control(pDX, IDC_VDIV1,				m_cVDiv1); 
	DDX_Control(pDX, IDC_VISTSTYLE1NORM,	m_cVistaStyle1Norm); 
	DDX_Control(pDX, IDC_VISTSTYLE1CHECK,	m_cVistaStyle1Checked); 
	DDX_Control(pDX, IDC_VISTSTYLE1HOVER,	m_cVistaStyle1NormH); 
	DDX_Control(pDX, IDC_VISTSTYLE1PRESS,	m_cVistaStyle1NormP); 
	DDX_Control(pDX, IDC_VISTSTYLE1CHECKT,	m_cVistaStyle1CheckedT); 
	DDX_Control(pDX, IDC_VISTSTYLE1CHECKTD, m_cVistaStyle1CheckedD); 
	DDX_Control(pDX, IDC_AQUA1,				m_cAqua1); 
	DDX_Control(pDX, IDC_AQUA2,				m_cAqua2); 
	DDX_Control(pDX, IDC_AQUA3,				m_cAqua3); 
	DDX_Control(pDX, IDC_STRINGFRAME,		m_cStringFrame); 
	DDX_Control(pDX, IDC_VISTSTYLE2NORM,	m_cVistaStyle2Norm); 
	DDX_Control(pDX, IDC_VISTSTYLE2HOT,		m_cVistaStyle2Hot); 
	DDX_Control(pDX, IDC_EDIT1,				m_cEdit1); 
	DDX_Control(pDX, IDC_EDIT2,				m_cEdit2); 
} 
 
BEGIN_MESSAGE_MAP(CStyleToolkitDlg, CDialog) 
	//{{AFX_MSG_MAP(CStyleToolkitDlg) 
	ON_WM_SYSCOMMAND() 
	ON_WM_PAINT() 
	ON_WM_QUERYDRAGICON() 
	ON_BN_CLICKED(IDC_PSTEP1, OnPstep1) 
	ON_BN_CLICKED(IDC_PSTEP2, OnPstep2) 
	ON_BN_CLICKED(IDC_PSTEP3, OnPstep3) 
	ON_BN_CLICKED(IDC_PSTEP4, OnPstep4) 
	ON_WM_ERASEBKGND() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CStyleToolkitDlg message handlers 
 
BOOL CStyleToolkitDlg::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
 
	// Add "About..." menu item to system menu. 
 
	// IDM_ABOUTBOX must be in the system command range. 
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 
	ASSERT(IDM_ABOUTBOX < 0xF000); 
 
	CMenu* pSysMenu = GetSystemMenu(FALSE); 
	if (pSysMenu != NULL) 
	{ 
		CString strAboutMenu; 
		strAboutMenu.LoadString(IDS_ABOUTBOX); 
		if (!strAboutMenu.IsEmpty()) 
		{ 
			pSysMenu->AppendMenu(MF_SEPARATOR); 
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 
		} 
	} 
 
	SetIcon(m_hIcon, TRUE);			// Set big icon 
	SetIcon(m_hIcon, FALSE);		// Set small icon 
	 
 
	m_cPStep1.LoadStdImage(IDR_PSTEP1, _T("PNG")); 
	m_cPStep2.LoadStdImage(IDR_PSTEP2, _T("PNG")); 
	m_cPStep3.LoadStdImage(IDR_PSTEP3, _T("PNG")); 
	m_cPStep4.LoadStdImage(IDR_PSTEP4, _T("PNG")); 
 
	// create the stacks 
	CreateStacks(); 
 
	 
	return TRUE;  
} 
 
void CStyleToolkitDlg::OnSysCommand(UINT nID, LPARAM lParam) 
{ 
	if ((nID & 0xFFF0) == IDM_ABOUTBOX) 
	{ 
		CAboutDlg dlgAbout; 
		dlgAbout.DoModal(); 
	} 
	else 
	{ 
		CDialog::OnSysCommand(nID, lParam); 
	} 
} 
 
void CStyleToolkitDlg::OnPaint()  
{ 
	if (IsIconic()) 
	{ 
		CPaintDC dc(this); // device context for painting 
 
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); 
 
		// Center icon in client rectangle 
		int cxIcon = GetSystemMetrics(SM_CXICON); 
		int cyIcon = GetSystemMetrics(SM_CYICON); 
		CRect rect; 
		GetClientRect(&rect); 
		int x = (rect.Width() - cxIcon + 1) / 2; 
		int y = (rect.Height() - cyIcon + 1) / 2; 
 
		// Draw the icon 
		dc.DrawIcon(x, y, m_hIcon); 
	} 
	else 
	{ 
		CDialog::OnPaint(); 
	} 
} 
 
HCURSOR CStyleToolkitDlg::OnQueryDragIcon() 
{ 
	return (HCURSOR) m_hIcon; 
} 
 
 
BOOL CStyleToolkitDlg::OnEraseBkgnd(CDC* pDevC) 
{ 
	CRect rect; 
	GetClientRect(rect); 
 
	CDialog::OnEraseBkgnd(pDevC); 
 
	MemDC pDC(pDevC, rect, TRUE); 
 
	m_Style.PaintStyle(pDC, rect); 
 
	if(!m_bBackgroundsSet) 
	{ 
		SetBackgrounds(pDC, rect); 
	} 
 
	return TRUE; 
} 
 
void CStyleToolkitDlg::CreateStacks() 
{ 
	///////////////////////////////// 
	////////// BACKGROUND /////////// 
	///////////////////////////////// 
 
	CRect rect;	GetClientRect(rect); 
	Stack BackPane(rect);  
 
	// the background fill 
	BackPane.FillSolid(rect, Black); 
	// this supresses some anti alias behavior 
	BackPane.SetOuterBorder(1, Black); 
 
	// add this stack to the style  
	m_Style.AddStack(BackPane); 
 
	///////////////////////////////// 
 
	// tri gradient with top bar example 
	CreateTealPane(); 
 
	// progress bar examples 
	CreateProgressBars(); 
 
	// button examples 
	CreateButtonPane(); 
 
	// the style1 buttons 
	CreateVistaStyle1Buttons(); 
 
	// the aqua style buttons 
	CreateAquaStyleButtons(); 
 
	// background image example 
	CreateRiverPane(); 
 
	// the style2 buttons 
	CreateVistaStyle2Buttons(); 
 
	// edit boxes example 
	CreateEditBoxes(); 
 
} 
 
 
void CStyleToolkitDlg::OnPstep1()  
{ 
	m_cProgress1.StepIt(); 
} 
 
void CStyleToolkitDlg::OnPstep2()  
{ 
	m_cProgress2.StepIt(); 
} 
 
void CStyleToolkitDlg::OnPstep3()  
{ 
	m_cProgress3.StepIt(); 
} 
 
void CStyleToolkitDlg::OnPstep4()  
{ 
	m_cProgress4.StepIt(); 
} 
 
 
#define GETCLIENTRECT(rc, control) CRect rc; control.GetClientRect(rc); rc.OffsetRect(-rc.left, -rc.top); 
#define GETSCREENRECT(rc, control) CRect rc; control.GetWindowRect(rc); ScreenToClient(rc); 
#define GETCONTROLRECT(rc, control) CRect rc; control.GetWindowRect(rc); rc.OffsetRect(-rc.left, -rc.top); 
 
 
///////////////////////////////////////////// 
/////////// TealPane //////////////////////// 
///////////////////////////////////////////// 
void CStyleToolkitDlg::CreateTealPane() 
{ 
	// define the rectangle 
	CRect rect; GetClientRect(rect);  CRect div1; m_cDiv1.GetWindowRect(div1);  
	ScreenToClient(div1); rect.bottom = div1.top; 
 
	// create the stack 
	Stack TealPane(rect); 
 
	// set the OuterBorder params 
	TealPane.SetOuterBorder(2, Black); 
 
	// set the Inner Border params 
	TealPane.SetInnerBorder(2, RGB(135, 192, 185), RGB(109, 165, 168)); 
 
	// 3 color gradient 
	TealPane.FillGrad3(HORIZ, RGB(9, 74, 116), RGB(32, 121, 140), RGB(5, 111, 90));  
 
	// add a top edge effect 
	TealPane.FillBar(rect, TOP_EDGE, 20, Clr(180,RGB(135, 192, 185)), Clr(0,White)); 
 
	// add the shield image 
	CRect crnr; m_cShield.GetWindowRect(crnr); 
	TealPane.AddImage(CPoint(crnr.left, crnr.top), IDR_SHIELD, _T("PNG"), 255); 
 
	// create a display string 
	CString str1(_T("Progress Styles\t\t\t    Indicator Styles")); CPoint pt1(158, 35); 
 
	// add the string  
	TealPane.AddString(str1, pt1, RGB(148, 215, 255), 14, FONT_REG, L"Swiss"); 
 
	// add to style 
	m_Style.AddStack(TealPane); 
} 
 
 
////////////////////////////////////////////////////////////////////////////////// 
///////// Create Progress Bars /////////////////////////////////////////////////// 
////////////////////////////////////////////////////////////////////////////////// 
void CStyleToolkitDlg::CreateProgressBars() 
{ 
	/////////////////////////////////////////////////////////////////////////////// 
	// Progress 1 - Uses default control stacks - not much to do here 
 
	m_cProgress1.SetRange(0, 100); 
	m_cProgress1.SetPos(50);		// this call will pre-create the stacks 
 
	// prepaint this control 
	CRect tr; m_cProgress1.GetWindowRect(tr); ScreenToClient(tr); 
	tr.DeflateRect(1,1); 
 
	Stack st0 = m_cProgress1.m_Style.m_Stacks[0]; 
	Stack st1 = m_cProgress1.m_Style.m_Stacks[1]; 
	st0.SetPosition(tr.left, tr.top); 
	tr.DeflateRect(1,1); 
	st1.SetPosition(tr.left, tr.top); 
	m_Style.AddStack(st0); 
	m_Style.AddStack(st1); 
 
	/////////////////////////////////////////////////////////////////////////////// 
	// Progress 2 
 
	// define some colors 
	COLORREF BorderColor = RGB(0xB2, 0xB2, 0xB2); 
	COLORREF GrayColor = RGB(0xC9, 0xC9, 0xC9); 
	COLORREF ProgGreen = RGB(0,0xd3,0x28); 
 
	// Get the progress control rect 
	GETCLIENTRECT(pc2rect, m_cProgress2); 
 
	//=============== Background Layers ===================/ 
	Stack ProgressBack(pc2rect); 
 
	// define the border params 
	ProgressBack.SetShape(ROUNDRECT, 12); 
	ProgressBack.SetOuterBorder(1, RGB(64, 160, 185)); 
	ProgressBack.SetMiddleBorder(1, Clr(64,White), Clr(0,White)); 
 
	// add the gray laver 
	ProgressBack.FillSolid(pc2rect, GrayColor); 
 
	// now it can be deflated, use a temporary version since it  
	// will be needed later 
	CRect tmprc(pc2rect); tmprc.DeflateRect(1,2);  
	 
	ProgressBack.FillBar(tmprc, LEFT_EDGE, 10, Clr(40,Black), Clr(0,White)); 
	ProgressBack.FillBar(tmprc, RIGHT_EDGE, 10, Clr(0,White), Clr(40,Black)); 
	ProgressBack.FillBar(tmprc, TOP_EDGE, 5, Clr(120,White), Clr(40,White)); 
	 
	float profile[3] = { 0.0f, 0.8f, 1.0f }; 
	ProgressBack.FillBar(tmprc, BOTTOM_EDGE, 5, Clr(15,White), Clr(120,White), 
														Clr(15,White), profile); 
 
	//=============== Foreground Layers ===================/ 
	int StepLayerIdx; 
 
	// this stack doesn't have a border, so deflate the rect 
	// to make the background's border visible 
	pc2rect.DeflateRect(1, 1);  
	Stack ProgressFore(pc2rect); 
 
	// make it a round rect 
	ProgressFore.SetShape(ROUNDRECT, 12); 
 
	// make this border semi transparent 
	ProgressFore.SetOuterBorder(1, Clr(160,White), Clr(0,White)); 
 
	// add the gradient layer 
	ProgressFore.FillGrad3(pc2rect, HORIZ, ProgGreen, Yellow, Red); 
 
	// add the effects layers 
	StepLayerIdx = ProgressFore.FillBar(pc2rect, LEFT_EDGE, 19, Clr(40,Black), Clr(0,White)); 
	ProgressFore.FillBar(pc2rect, RIGHT_EDGE, 20, Clr(0,White), Clr(40,Black)); 
	ProgressFore.FillBar(pc2rect, TOP_EDGE, 6, Clr(160,White), Clr(100,White)); 
	ProgressFore.FillBar(pc2rect, BOTTOM_EDGE, 6, Clr(15,White), Clr(50,White)); 
 
	// add the background 
	m_cProgress2.AddStack(ProgressBack); 
 
	// layer zero added with this function is the one that will step 
	m_cProgress2.AddStepStack(ProgressFore); 
 
	// over ride to layer one as the step layer 
	m_cProgress2.SetStepLayer(StepLayerIdx); 
 
	// add some text 
	Stack TextStack(pc2rect); 
	TextStack.AddString("Used Disk Space", CPoint(35, 7), Blue); 
 
	m_cProgress2.AddStack(TextStack); 
	m_cProgress2.SetPos(90); 
 
	/////////////////////////////////////////////////////////////////////////////// 
	// Progress 3 
 
	// Get the progress control rect 
	GETCLIENTRECT(pc3rect, m_cProgress3); 
 
	COLORREF topclr = RGB(0xba,0xba,0xba); 
	COLORREF mdlclr = RGB(0xf0,0xf0,0xf0); 
	COLORREF btmclr = RGB(0xe3,0xe3,0xe3); 
 
	Stack ProgressBack3(pc3rect); 
	ProgressBack3.SetOuterBorder(1, Gray); 
	ProgressBack3.FillGrad3(VERT, Clr(255, topclr), Clr(255, mdlclr),  
														Clr(255, btmclr), 0.65f); 
 
	pc3rect.InflateRect(-3, -3); 
 
	Stack ProgressTop3(pc3rect); 
	ProgressTop3.SetShape(ROUNDRECT, 11); 
	ProgressTop3.SetOuterBorder(1, RGB(128, 128, 185)); 
	ProgressTop3.FillSolid(pc3rect, Blue); 
 
	COLORREF lightblue = RGB(0x9f,0xe6,0xff); 
 
	ProgressTop3.FillBar(TOP_EDGE, 10, Clr(225, lightblue), Clr(16,White)); 
 
	float profile3[3] = { 0.0f, 0.9f, 1.0f}; 
	ProgressTop3.FillBar(BOTTOM_EDGE, 14, CLEAR, Clr(200,lightblue), Clr(40,lightblue),  
																					profile3); 
 
	m_cProgress3.AddStack(ProgressBack3); 
	m_cProgress3.AddStepStack(ProgressTop3); 
 
	m_cProgress3.SetPos(70); 
 
	/////////////////////////////////////////////////////////////////////////////// 
	// Progress 4 
 
	// Get the progress control rect 
	GETCLIENTRECT(pc4rect, m_cProgress4); 
 
	// the background is transparent, but 
	// the stack is needed to hold the background information 
	Stack ProgressBack4(pc4rect); 
 
	pc4rect.InflateRect(-1, -1); 
 
	Stack ProgressTop4(pc4rect); 
	ProgressTop4.SetOuterBorder(1, RGB(64, 160, 185)); 
 
	ProgressTop4.FillGrad3(pc4rect, HORIZ, Red, Yellow, Clr(255, RGB(0,192,0))); 
 
	StepLayerIdx = ProgressTop4.FillWrap(pc4rect, TILE, 14, Clr(128,White), Clr(0,0),  
																			Clr(128,Black)); 
	 
	m_cProgress4.AddStack(ProgressBack4); 
	m_cProgress4.AddStepStack(ProgressTop4); 
		 
	// over ride to layer one as the step layer 
	m_cProgress4.SetStepLayer(StepLayerIdx); 
 
	m_cProgress4.SetPos(90); 
} 
 
///////////////////////////////////////////// 
/////////// Button Pane ///////////////////// 
///////////////////////////////////////////// 
void CStyleToolkitDlg::CreateButtonPane() 
{ 
	GETSCREENRECT(rect1, m_cDiv1); 
	GETSCREENRECT(rect2, m_cDiv2); 
	GETSCREENRECT(rect3, m_cVDiv1); 
 
	//////////////////////////////////////////////// 
	//  Left Side Background 
 
	CRect srect = rect1; srect.bottom = rect2.top; srect.right = rect3.left; 
 
	// allow the background edge 
	srect.DeflateRect(2,1); 
 
	Stack ButtonPane(srect); 
 
	// set as rounded rectangle  
	ButtonPane.SetShape(TRANSITION, 8); 
 
	COLORREF brdr = 0x00b0b0b0; 
 
	// set the OuterBorder size and color 
	ButtonPane.SetOuterBorder(5, brdr); 
	ButtonPane.SetMiddleBorder(1, Black); 
 
	// add the tlclr space image 
	ButtonPane.AddImage(CPoint(0, 0), CPoint(0, 0), IDR_METAL, _T("JPG")); 
 
	// create a display string 
	CString str1(_T("Vista Style 1")); CPoint pt1(84, 156); 
 
	// add the string  
	ButtonPane.AddString(str1, pt1, Silver, 16, FONT_REG, L"Swiss"); 
 
	// add to stack 
	m_Style.AddStack(ButtonPane); 
 
	//////////////////////////////////////////////////////////////////////////////// 
	// Right Side background 
 
	CRect wrect = rect1; wrect.bottom = rect2.top; wrect.left = rect3.left; 
 
	wrect.DeflateRect(0, 1); wrect.right-=3; wrect.bottom--; 
 
	RaisedFrame rf(wrect, Orange, Orange, 10); 
	 
	// add to stack 
	m_Style.AddStack(rf.RFrame); 
 
	Stack RightSide(wrect); 
 
	// create a display string 
	CString str2(_T("Aqua\nStyles")); CPoint pt2(26, 125); 
 
	// add the string  
	RightSide.AddString(str2, pt2, Brown, 18, FONT_BOLD, L"Swiss"); 
 
	// add to stack 
	m_Style.AddStack(RightSide); 
} 
 
///////////////////////////////////////////// 
/////////// Vista Style 1 Buttons /////////// 
///////////////////////////////////////////// 
void CStyleToolkitDlg::CreateVistaStyle1Buttons() 
{ 
	// all these buttons are the same size, so only need to do this once 
	GETCONTROLRECT(rc, m_cVistaStyle1Norm); 
	// allow room for the pressed state, since some of them are auto generated 
	rc.right--; rc.bottom--; 
 
	VistaButton1 vbs1(rc); 
 
	//========= Normal Button ===========// 
	Stack Top1; 
	Top1.SetRect(rc); 
	Top1.AddAString("Std", ALIGN_CENTER_LIMAGE, 0, White, 16); 
	Top1.AddImage(CPoint(8, 8), IDR_DB16, _T("PNG")); 
	 
	// add the standard style 
	Style std; std.AddStack(vbs1.VBStd + Top1); 
	m_cVistaStyle1Norm.LoadStdStyle(std); 
 
	// add the hot style 
	Style hot; hot.AddStack(vbs1.VBHot + Top1); 
	m_cVistaStyle1Norm.LoadHotStyle(hot); 
 
	// add the pressed style 
	Style press; press.AddStack(vbs1.VBPress + Top1); 
	m_cVistaStyle1Norm.LoadPressedStyle(press); 
 
	//========= Toggle Button ===========// 
	Stack Top2; 
	Top2.SetRect(rc); 
	Top2.AddAString("Alt", ALIGN_CENTER_LIMAGE, 0, White, 16); 
	Top2.AddImage(CPoint(8, 8), IDR_ADD16, _T("PNG")); 
 
	// add the standard style 
	Style std2; std2.AddStack(vbs1.VBStd + Top2); 
	m_cVistaStyle1Checked.LoadStdStyle(std2); 
 
	// add the hot style 
	Style hot2; hot2.AddStack(vbs1.VBHot + Top2); 
	m_cVistaStyle1Checked.LoadHotStyle(hot2); 
 
	// add the pressed style 
	Style press2; press2.AddStack(vbs1.VBPress + Top2); 
	m_cVistaStyle1Checked.LoadPressedStyle(press2); 
 
	// add the alt style 
	Style alt2; alt2.AddStack(vbs1.VBAlt + Top2); 
	m_cVistaStyle1Checked.LoadAltStyle(alt2); 
	m_cVistaStyle1Checked.LoadAltPressedStyle(alt2); 
	m_cVistaStyle1Checked.EnableToggle(TRUE); 
 
 
	//=========================================================================// 
	// ----- These are just for Demo so use they load the std styles ----------// 
	//=========================================================================// 
	Stack Top1a; 
	Top1a.SetRect(rc); 
	Top1a.AddAString("Hover", ALIGN_CENTER_LIMAGE, 10, White, 16); 
	Top1a.AddImage(CPoint(8, 8), IDR_DB16, _T("PNG")); 
	 
	// add the standard style 
	Style std1a; std1a.AddStack(vbs1.VBHot + Top1a); 
	m_cVistaStyle1NormH.LoadStdStyle(std1a); 
 
	Stack Top1b; 
	Top1b.SetRect(rc); 
	Top1b.AddAString("Pressed", ALIGN_CENTER_LIMAGE, 12, White, 16); 
	Top1b.AddImage(CPoint(8, 8), IDR_DB16, _T("PNG")); 
	 
	// add the standard style 
	Style std1b; std1b.AddStack(vbs1.VBPress + Top1b); 
	m_cVistaStyle1NormP.LoadStdStyle(std1b); 
 
	Stack Top2a; 
	Top2a.SetRect(rc); 
	Top2a.AddAString("Toggle", ALIGN_CENTER_LIMAGE, 11, White, 16); 
	Top2a.AddImage(CPoint(8, 8), IDR_ADD16, _T("PNG")); 
	 
	// add the standard style 
	Style std2a; std2a.AddStack(vbs1.VBAlt + Top2a); 
	m_cVistaStyle1CheckedT.LoadStdStyle(std2a); 
 
	Stack Top2b; 
	Top2b.SetRect(rc); 
	Top2b.AddAString("Disable", ALIGN_CENTER_LIMAGE, 11, White, 16); 
	Top2b.AddImage(CPoint(8, 8), IDR_ADD16, _T("PNG")); 
	 
	// add the standard style 
	Style std2b; std2b.AddStack(vbs1.VBAlt + Top2b); 
	m_cVistaStyle1CheckedD.LoadStdStyle(std2b); 
	m_cVistaStyle1CheckedD.EnableButton(FALSE); 
} 
 
///////////////////////////////////////////// 
/////////// Aqua Style Buttons ////////////// 
///////////////////////////////////////////// 
void CStyleToolkitDlg::CreateAquaStyleButtons() 
{ 
	GETCONTROLRECT(rc, m_cAqua1); 
	AquaButton aqua1(rc, Yellow, White, Orange, "Normal"); 
 
	// add the standard style 
	m_cAqua1.LoadStdStyle(aqua1.Std); 
	m_cAqua1.LoadHotStyle(aqua1.Hot); 
	m_cAqua1.LoadPressedStyle(aqua1.Press); 
 
	GETCONTROLRECT(rc2, m_cAqua2); 
	AquaButton aqua2(rc2, White, Orange, Orange, "Hot"); 
 
	// add the standard style 
	m_cAqua2.LoadStdStyle(aqua2.Std); 
	m_cAqua2.LoadHotStyle(aqua2.Hot); 
	m_cAqua2.LoadPressedStyle(aqua2.Press); 
 
	GETCONTROLRECT(rc3, m_cAqua3); 
	AquaButton aqua3(rc3, RGB(0,230,0), Orange, Orange, "Press\nMe", 16); 
 
	// add the standard style 
	m_cAqua3.LoadStdStyle(aqua3.Std); 
	m_cAqua3.LoadHotStyle(aqua3.Hot); 
	m_cAqua3.LoadPressedStyle(aqua3.Press); 
 
	// There is some delay until the control gets around 
	// to painting the buttons.  This code will prepaint 
	// the buttons so the delay isn't apparent  
	GETSCREENRECT(tr, m_cAqua1); 
	aqua1.StdStack.SetPosition(tr.left, tr.top); 
	m_Style.AddStack(aqua1.StdStack); 
 
	GETSCREENRECT(tr2, m_cAqua2); 
	aqua2.StdStack.SetPosition(tr2.left, tr2.top); 
	m_Style.AddStack(aqua2.StdStack); 
 
	GETSCREENRECT(tr3, m_cAqua3); 
	aqua3.StdStack.SetPosition(tr3.left, tr3.top); 
	m_Style.AddStack(aqua3.StdStack); 
} 
 
 
///////////////////////////////// 
/////////// RiverPane /////////// 
///////////////////////////////// 
void CStyleToolkitDlg::CreateRiverPane() 
{ 
	CRect rect;	GetClientRect(rect); CRect div2; m_cDiv2.GetWindowRect(div2); 
	ScreenToClient(div2); rect.top = div2.top; 
 
	rect.DeflateRect(2,1); rect.bottom--; 
 
	Stack RiverPane(rect); 
 
	// set as rounded rectangle  
	RiverPane.SetShape(TRANSITION, 13); 
 
	// set the OuterBorder size and color 
	RiverPane.SetOuterBorder(6, DeepGreen); 
 
	// add the waterfall image 
	RiverPane.AddImage(CPoint(0, 0), CPoint(0, 0), IDR_WATER, _T("JPG")); 
 
	// create a display string 
	CString str2(_T("Vista Style 2\t        StyleEdit")); 
 
	// add the string with a foreground color 
	RiverPane.AddString(str2, CPoint(270, 136), Clr(212,Yellow), 16, FONT_REG); 
 
	// add to stack 
	m_Style.AddStack(RiverPane); 
 
	// create a display string 
	CString str(_T("Panzer\nComputing")); 
 
	GETSCREENRECT(pcr, m_cStringFrame); 
 
	RaisedFrame rf(pcr, Clr(128, Yellow), DeepGreen, 10); 
 
	// add the string with a foreground color 
	rf.RFrame.AddAString(pcr, str, ALIGN_CENTER, DeepGreen, 26, FONT_BOLD); 
 
	pcr.top++; pcr.left++; 
	rf.RFrame.AddAString(pcr, str, ALIGN_CENTER, DarkGreen, 26, FONT_BOLD); 
 
	// add to stack 
	m_Style.AddStack(rf.RFrame); 
} 
 
///////////////////////////////////////////// 
/////////// Vista Style 2 Buttons /////////// 
///////////////////////////////////////////// 
void CStyleToolkitDlg::CreateVistaStyle2Buttons() 
{ 
	GETCONTROLRECT(rc, m_cVistaStyle2Norm); 
	VistaButton2 vbs2(rc, Clr(0, RGB(0,192,0))); 
 
	//========= Normal Button ===========// 
	Stack Top1; 
	Top1.SetRect(rc); 
	Top1.AddAString("Std", ALIGN_CENTER_LIMAGE, 0, White, 16); 
	Top1.AddImage(CPoint(8, 8), IDR_DB16, _T("PNG")); 
	 
	// create the std stack 
	VS2Std = vbs2.VBStd + Top1; 
 
	// create the styles 
	Style std; std.AddStack(VS2Std); 
	Style hot; hot.AddStack(vbs2.VBHot + Top1); 
 
	// add the styles 
	m_cVistaStyle2Norm.LoadStdStyle(std); 
	m_cVistaStyle2Norm.LoadHotStyle(hot); 
 
	GETCONTROLRECT(rc2, m_cVistaStyle2Hot); 
	VistaButton2 vbs2a(rc2, Clr(0, RGB(0,192,0))); 
 
	//========= Hot Button ===========// 
	Stack Top1a; 
	Top1a.SetRect(rc2); 
	Top1a.AddAString("Hot", ALIGN_CENTER_LIMAGE, 0, White, 16); 
	Top1a.AddImage(CPoint(8, 8), IDR_DB16, _T("PNG")); 
	 
	// create the hot stack 
	VS2Hot = vbs2a.VBHot + Top1a; 
 
	// switch hot and std for demo 
	Style std1a; std1a.AddStack(VS2Hot); 
	Style hot1a; hot1a.AddStack(vbs2a.VBStd + Top1a); 
	 
	// load styles 
	m_cVistaStyle2Hot.LoadStdStyle(std1a); 
	m_cVistaStyle2Hot.LoadHotStyle(hot1a); 
 
} 
 
 
////////////////////////////////////////////////////////////////////////////////// 
///////// Create Edit Boxes ////////////////////////////////////////////////////// 
////////////////////////////////////////////////////////////////////////////////// 
void CStyleToolkitDlg::CreateEditBoxes() 
{ 
	/////////////////////////////////////// 
	///////// EditBox1 //// /////////////// 
	/////////////////////////////////////// 
	GETCONTROLRECT(erect1, m_cEdit1); 
 
	// create the stack 
	Stack Edit1Stack(erect1); 
	Edit1Stack.SetOuterBorder(1, DeepGreen); 
	Edit1Stack.SetInnerBorder(1, White); 
 
	// set as gradient 
	//Edit1Stack.FillSolid(Clr(0,DeepGreen)); 
 
	Edit1Stack.FillGrad2(HORIZ, Clr(200,DeepGreen), Clr(0,Black), -0.2f); 
 
	// apply stack to edit box 
	m_cEdit1.SetStack(Edit1Stack); 
 
	// set edit box text color 
	m_cEdit1.SetTextClr(Yellow); 
 
	m_cEdit1.SetWindowTextA("Edit Box 1"); 
 
	/////////////////////////////////////// 
	///////// EditBox2 //// /////////////// 
	/////////////////////////////////////// 
	GETCONTROLRECT(erect2, m_cEdit2);  
 
	// the rect will be set by StyleEdit 
	Stack Edit2Stack(erect2); 
	Edit2Stack.SetOuterBorder(1, DeepGreen); 
	Edit2Stack.SetInnerBorder(1, White); 
 
	// set as gradient 
	Edit2Stack.FillGrad2(VERT, CLEAR, Clr(200, DeepGreen),0.4f); 
 
	// apply stack to edit box 
	m_cEdit2.SetStack(Edit2Stack); 
 
	// set edit box text color 
	m_cEdit2.SetTextClr(Yellow); 
 
	m_cEdit2.SetWindowTextA("Edit Box 2"); 
 
} 
 
// Transparent controls need to get the correct background. 
// By setting them after the background is are created, the  
// controls will have the correct data regardless of what may 
// be on the screen.  This function also prepaints the controls 
void CStyleToolkitDlg::SetBackgrounds(CDC* pDC, CRect rect) 
{ 
 
	m_cVistaStyle2Norm.SetBkGnd(pDC); 
	m_cVistaStyle2Hot.SetBkGnd(pDC); 
 
	// prepaint these 
	Style TempStyle; 
 
	GETSCREENRECT(trc1, m_cVistaStyle2Norm); 
	VS2Std.SetPosition(trc1.left, trc1.top); 
	TempStyle.AddStack(VS2Std); 
 
	GETSCREENRECT(trc2, m_cVistaStyle2Hot); 
	VS2Hot.SetPosition(trc2.left, trc2.top); 
	TempStyle.AddStack(VS2Hot); 
 
	TempStyle.PaintStyle(pDC, rect); 
 
	m_bBackgroundsSet = TRUE; 
}