Click here to Skip to main content
15,895,746 members
Articles / Desktop Programming / MFC

Professional User Interface Suite

Rate me:
Please Sign up or sign in to vote.
4.99/5 (174 votes)
13 Jan 200423 min read 1.5M   23.6K   641  
MFC extension library enabling software to be provided with a professional UI
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "FunnyBars.h"
#include "MainFrm.h"
#include "ChildView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CFunnyToolButton

IMPLEMENT_DYNAMIC( CFunnyToolButton, CExtBarButton );

CFunnyToolButton::CFunnyToolButton(
	CExtToolControlBar * pBar,
	UINT nCmdID,
	LPCTSTR strFunnyText,
	double lfHotPercent
	) : CExtBarButton( pBar, nCmdID, 0 )
	, m_strFunnyText( (strFunnyText==NULL) ? _T("") : strFunnyText )
	, m_sizeFunnyTextCalc( 0, 0 )
	, m_sizeFunnyTextWell( 0, 0 )
	, m_lfHotPercent( lfHotPercent )
{
}

CSize CFunnyToolButton::CalculateLayout(
	CDC & dc,
	CSize sizePreCalc,
	BOOL bHorz
	)
{
	ASSERT_VALID( this );
CSize _size = CExtBarButton::CalculateLayout( dc, sizePreCalc, bHorz );
	ASSERT( !IsSeparator() );
	if( !m_strFunnyText.IsEmpty() )	
	{
		CFont * pOldFont = dc.SelectObject( &g_PaintManager->m_FontNormal );
		CRect rcMeasured( 0, 0, 0, 0 );
		dc.DrawText( m_strFunnyText, &rcMeasured, DT_LEFT|DT_CALCRECT );
		m_sizeFunnyTextWell = rcMeasured.Size();
		m_sizeFunnyTextWell.cx += __EXT_TB_BUTTON_TEXT_MARGIN*2;
		static CString strMeasureTemplate( _T("AapqWZz\nAapqWZz") );
		dc.DrawText( strMeasureTemplate, &rcMeasured, DT_LEFT|DT_CALCRECT );
		dc.SelectObject( pOldFont );
		m_sizeFunnyTextCalc = rcMeasured.Size();
		m_sizeFunnyTextCalc.cx += __EXT_TB_BUTTON_TEXT_MARGIN*2;
		m_sizeFunnyTextCalc.cx = max( m_sizeFunnyTextWell.cx, m_sizeFunnyTextCalc.cy );
		m_sizeFunnyTextCalc.cy = max( m_sizeFunnyTextWell.cy, m_sizeFunnyTextCalc.cy );
		m_sizeFunnyTextCalc.cx += __EXT_TB_BUTTON_INNER_MARGIN*2;
		_size.cx = max( m_sizeFunnyTextCalc.cx, _size.cx );
		_size.cy += m_sizeFunnyTextCalc.cy + 4;
	} // if( !m_strFunnyText.IsEmpty() )	
	m_ActiveSize = _size;
	return m_ActiveSize;
}

void CFunnyToolButton::Paint(
	CDC & dc,
	bool bHorz
	)
{
	ASSERT_VALID( this );
	ASSERT( dc.GetSafeHdc() != NULL );
CExtToolControlBar * pBar = GetBar();
	ASSERT_VALID( pBar );
	if( m_bNoRotateVerticalLayout )
		bHorz = TRUE;
	if( (m_pCtrl != NULL) && (!m_bVertDocked || GetCtrlVisibleVertically()) )
		return;
	ASSERT( !IsSeparator() );
CRect rcArea( m_ActiveRect );
	rcArea.DeflateRect( __EXT_TB_BUTTON_INNER_MARGIN, __EXT_TB_BUTTON_INNER_MARGIN );
	if(		(!IsVisible())
		||	rcArea.right <= rcArea.left || rcArea.bottom <= rcArea.top
		||	(GetStyle() & TBBS_HIDDEN) != 0
		||	(!dc.RectVisible(&m_ActiveRect))
		)
		return;
bool bPushed = IsPressed() ? true : false;
bool bEnabled = IsDisabled() ? false : true;
bool bHover =
		(	IsHover()
			&& (! CExtToolControlBar::g_bMenuTracking )
			&& (! CExtPopupMenuWnd::IsMenuTracking() )
		) ? true : false;
bool bIndeterminate = IsIndeterminate() ? true : false;
CExtCmdIcon * pIcon = GetIconPtr();
	if( m_lfHotPercent >= -1.0 && pIcon != NULL && (! pIcon->IsEmpty() ) )
	{
		ASSERT( m_lfHotPercent <= 1.0 );
		ASSERT( pIcon->IsBitmapBased() );
		if( m_iconCold.IsEmpty() )
		{
			COLORREF clrTransparent =
				pIcon->GetBitmapTransparentColor();
			HBITMAP hBitmap = NULL;
			COLORREF * pClrQuadSurface = NULL;
			if( pIcon->ExtractEditableBitmap(
					hBitmap,
					clrTransparent,
					NULL,
					&pClrQuadSurface
					)
				)
			{
				ASSERT( pClrQuadSurface != NULL );
				COLORREF clrQuadTransparent =
					RGB(
						GetBValue(clrTransparent),
						GetGValue(clrTransparent),
						GetRValue(clrTransparent)
						);
				CSize sizeIcon = pIcon->GetSize();
				ASSERT( sizeIcon.cx > 0 && sizeIcon.cy > 0 );
				LONG nPixelCount = sizeIcon.cx * sizeIcon.cy;
				for( LONG nPixelIndex = 0; nPixelIndex < nPixelCount; nPixelIndex++ )
				{
					COLORREF clrQuad = pClrQuadSurface[ nPixelIndex ];
					if( clrQuad == clrQuadTransparent )
						continue;
					double lfVal =
							( double(GetBValue(clrQuad)) / 255.0 ) * 0.3
						+	( double(GetGValue(clrQuad)) / 255.0 ) * 0.5
						+	( double(GetRValue(clrQuad)) / 255.0 ) * 0.2
						;
					if( m_lfHotPercent > 0.0 )
						lfVal = lfVal + (1.0 - lfVal) * m_lfHotPercent;
					else if( m_lfHotPercent < 0.0 )
						lfVal = lfVal * (1.0 + m_lfHotPercent);
					if( lfVal > 1.0 )
						lfVal = 1.0;
					else if( lfVal < 0.0 )
						lfVal = 0.0;
					BYTE nVal = (BYTE)( lfVal * 255.0 );
					clrQuad = RGB( nVal, nVal, nVal );
					pClrQuadSurface[ nPixelIndex ] = clrQuad;
				} // for( LONG nPixelIndex = 0; nPixelIndex < nPixelCount; nPixelIndex++ )
				m_iconCold.AssignFromHBITMAP( hBitmap, clrTransparent );
				ASSERT( !m_iconCold.IsEmpty() );
				::DeleteObject( hBitmap );
			}
#ifdef _DEBUG
			else
			{
				ASSERT( FALSE );
			}
#endif // _DEBUG
		} // if( m_iconCold.IsEmpty() )
		if( (! bHover) && (! bPushed) && (! m_iconCold.IsEmpty() )  )
			pIcon = &m_iconCold;
	} // if( m_lfHotPercent >= -1.0 && pIcon != NULL && (! pIcon->IsEmpty() ) )
CExtPaintManager::PAINTPUSHBUTTONDATA _ppbd(
		this, /*bHorz*/true, rcArea, NULL, pIcon,
		true, bHover, bPushed, bIndeterminate, bEnabled,
		true, false, false, CExtPaintManager::__ALIGN_HORIZ_CENTER, NULL,
		(	IsAbleToTrackMenu()
			&& (!m_pBar->IsKindOf(RUNTIME_CLASS(CExtMenuControlBar)))
			) ? true : false,
		0, ( bEnabled && (!bHover) && (!bPushed) )
		);
	if( m_bSeparatedDropDown )
	{
		_ppbd.m_bSeparatedDropDown = true;
		if(		(m_bDropDownHT || CExtToolControlBar::g_bMenuTracking)
			&&	bPushed
			)
			_ppbd.m_bPushedDropDown = true;
	} // if( m_bSeparatedDropDown )
	g_PaintManager->PaintPushButton( dc, _ppbd );
CRect rcText( rcArea );
	rcText.DeflateRect( __EXT_TB_BUTTON_OUTER_MARGIN, __EXT_TB_BUTTON_OUTER_MARGIN+__EXT_TB_BUTTON_INNER_MARGIN  );
	rcText.top = rcText.bottom - m_sizeFunnyTextCalc.cy;
	rcText.OffsetRect(
		( m_sizeFunnyTextCalc.cx - m_sizeFunnyTextWell.cx ) / 2,
		( m_sizeFunnyTextCalc.cy - m_sizeFunnyTextWell.cy ) / 2
		);
	if( bPushed )
		rcText.OffsetRect( g_PaintManager->GetPushedOffset() );
CFont fontTmp;
CFont * pOldFont = NULL;
COLORREF clrText = 
		bEnabled
			? (	( m_lfHotPercent >= -1.0f )
				? g_PaintManager->GetColor(
					(bHover || bPushed) ? COLOR_HIGHLIGHT : COLOR_BTNTEXT
					)
				: dc.GetNearestColor(
					(bHover || bPushed) ? ( RGB(255,64,64) ) : ( RGB(64,64,255) )
					)
				)
			: g_PaintManager->GetColor(COLOR_3DSHADOW)
			;
	if( bEnabled && bHover || bPushed )
	{
		LOGFONT lf;
		VERIFY( g_PaintManager->m_FontNormal.GetLogFont(&lf) );
		lf.lfUnderline = TRUE;
		VERIFY( fontTmp.CreateFontIndirect(&lf) );
		dc.SelectObject( &fontTmp );
	}
	else
		dc.SelectObject( &g_PaintManager->m_FontNormal );
int nOldBkMode = dc.SetBkMode( TRANSPARENT );
COLORREF clrTextOld = dc.SetTextColor( clrText );
	dc.DrawText( m_strFunnyText, &rcText, DT_CENTER|DT_VCENTER );
	dc.SetTextColor( clrTextOld );
	dc.SetBkMode( nOldBkMode );
	dc.SelectObject( pOldFont );
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_SETFOCUS()
	//}}AFX_MSG_MAP

	ON_COMMAND( ID_256_FILE_NEW, OnAnyCommand )
	ON_COMMAND( ID_256_FILE_OPEN, OnAnyCommand )
	ON_COMMAND( ID_256_FILE_FAVORITES, OnAnyCommand )
	ON_COMMAND( ID_256_FILE_ADD, OnAnyCommand )
	ON_COMMAND( ID_256_FILE_EXTRACT, OnAnyCommand )
	ON_COMMAND( ID_256_FILE_VIEW, OnAnyCommand )
	ON_COMMAND( ID_256_FILE_CHECK_OUT, OnAnyCommand )
	ON_COMMAND( ID_256_FILE_WIZARD, OnAnyCommand )
	ON_COMMAND( ID_TRUE_FILE_NEW, OnAnyCommand )
	ON_COMMAND( ID_TRUE_FILE_OPEN, OnAnyCommand )
	ON_COMMAND( ID_TRUE_FILE_FAVORITES, OnAnyCommand )
	ON_COMMAND( ID_TRUE_FILE_ADD, OnAnyCommand )
	ON_COMMAND( ID_TRUE_FILE_EXTRACT, OnAnyCommand )
	ON_COMMAND( ID_TRUE_FILE_VIEW, OnAnyCommand )
	ON_COMMAND( ID_TRUE_FILE_CHECK_OUT, OnAnyCommand )
	ON_COMMAND( ID_TRUE_FILE_WIZARD, OnAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_256_FILE_NEW, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_256_FILE_OPEN, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_256_FILE_FAVORITES, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_256_FILE_ADD, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_256_FILE_EXTRACT, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_256_FILE_VIEW, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_256_FILE_CHECK_OUT, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_256_FILE_WIZARD, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_TRUE_FILE_NEW, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_TRUE_FILE_OPEN, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_TRUE_FILE_FAVORITES, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_TRUE_FILE_ADD, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_TRUE_FILE_EXTRACT, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_TRUE_FILE_VIEW, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_TRUE_FILE_CHECK_OUT, OnUpdateAnyCommand )
	ON_UPDATE_COMMAND_UI( ID_TRUE_FILE_WIZARD, OnUpdateAnyCommand )

	ON_COMMAND_EX(ID_VIEW_MENUBAR, OnBarCheck )
	ON_UPDATE_COMMAND_UI(ID_VIEW_MENUBAR, OnUpdateControlBarMenu)

	ON_COMMAND_EX(IDR_TOOLBAR_SMALL_256_COLOR, OnBarCheck )
	ON_UPDATE_COMMAND_UI(IDR_TOOLBAR_SMALL_256_COLOR, OnUpdateControlBarMenu)

	ON_COMMAND_EX(IDR_TOOLBAR_BIG_TRUE_COLOR, OnBarCheck )
	ON_UPDATE_COMMAND_UI(IDR_TOOLBAR_BIG_TRUE_COLOR, OnUpdateControlBarMenu)

	ON_COMMAND_EX(IDR_TOOLBAR_BIG_TRUE_COLOR2, OnBarCheck )
	ON_UPDATE_COMMAND_UI(IDR_TOOLBAR_BIG_TRUE_COLOR2, OnUpdateControlBarMenu)

	ON_COMMAND_EX(IDR_TOOLBAR_BIG_TRUE_COLOR3, OnBarCheck )
	ON_UPDATE_COMMAND_UI(IDR_TOOLBAR_BIG_TRUE_COLOR3, OnUpdateControlBarMenu)
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	g_PaintManager.InstallPaintManager( new CExtPaintManagerOffice2003 );
	CExtPopupMenuWnd::g_bMenuExpanding = false;
	CExtPopupMenuWnd::g_bMenuHighlightRarely = false;

	// window placement persistence
	::memset( &m_dataFrameWP, 0, sizeof(WINDOWPLACEMENT) );
	m_dataFrameWP.length = sizeof(WINDOWPLACEMENT);
	m_dataFrameWP.showCmd = SW_HIDE;
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

HICON hIcon = (::AfxGetApp())->LoadIcon(IDR_MAINFRAME);
	ASSERT( hIcon != NULL );
	SetIcon( hIcon, TRUE );
	SetIcon( hIcon, FALSE );

CCreateContext _cc;
	_cc.m_pCurrentDoc = NULL;
	_cc.m_pCurrentFrame = this;
	_cc.m_pLastView = NULL;
	_cc.m_pNewDocTemplate = NULL;
	_cc.m_pNewViewClass = RUNTIME_CLASS( CChildView );
CWnd * pWndView = CreateView( &_cc );
	if( pWndView == NULL )
	{
		TRACE0("Failed to create view window\n");
		return -1;
	}
	ASSERT_KINDOF( CChildView, pWndView );
CChildView * pChildView =
		STATIC_DOWNCAST( CChildView, pWndView );
	SetActiveView( pChildView );
	pWndView->ModifyStyleEx( WS_EX_CLIENTEDGE|WS_EX_STATICEDGE|WS_EX_DLGMODALFRAME, 0, SWP_FRAMECHANGED );

CWinApp * pApp = ::AfxGetApp();
	ASSERT( pApp != NULL );
	ASSERT( pApp->m_pszRegistryKey != NULL );
	ASSERT( pApp->m_pszRegistryKey[0] != _T('\0') );
	ASSERT( pApp->m_pszProfileName != NULL );
	ASSERT( pApp->m_pszProfileName[0] != _T('\0') );

	ASSERT( pApp->m_pszProfileName != NULL );
	g_CmdManager->ProfileSetup(
		pApp->m_pszProfileName,
		GetSafeHwnd()
		);
	VERIFY(
		g_CmdManager->UpdateFromMenu(
			pApp->m_pszProfileName,
			IDR_MAINFRAME
			)
		);
	VERIFY(
		g_CmdManager->UpdateFromToolBar(
			pApp->m_pszProfileName,
			IDR_MAINFRAME
			)
		);
	VERIFY(
		g_CmdManager->UpdateFromToolBar(
			pApp->m_pszProfileName,
			IDR_TOOLBAR_SMALL_256_COLOR,
			NULL,
			NULL,
			false,
			true,
			RGB(188,190,188)
			)
		);
	VERIFY(
		g_CmdManager->UpdateFromToolBar(
			pApp->m_pszProfileName,
			IDR_TOOLBAR_BIG_TRUE_COLOR
			)
		);
CExtCmdItem * pCmdItem =
		g_CmdManager->CmdGetPtr(
			pApp->m_pszProfileName, ID_APP_ABOUT );
	ASSERT( pCmdItem != NULL );
	pCmdItem->m_sToolbarText = pCmdItem->m_sMenuText;
	pCmdItem->m_sToolbarText.Replace( __EXT_MFC_SAFE_LPCTSTR( _T("&") ), __EXT_MFC_SAFE_LPCTSTR( _T("") ) );

	pCmdItem =
		g_CmdManager->CmdGetPtr(
			pApp->m_pszProfileName, ID_APP_EXIT );
	ASSERT( pCmdItem != NULL );
	pCmdItem->m_sToolbarText = pCmdItem->m_sMenuText;
	pCmdItem->m_sToolbarText.Replace( __EXT_MFC_SAFE_LPCTSTR( _T("&") ), __EXT_MFC_SAFE_LPCTSTR( _T("") ) );

	pCmdItem =
		g_CmdManager->CmdGetPtr(
			pApp->m_pszProfileName, ID_VIEW_UI_STYLE_2K );
	ASSERT( pCmdItem != NULL );
	pCmdItem->m_sToolbarText = pCmdItem->m_sMenuText;
	pCmdItem->m_sToolbarText.Replace( __EXT_MFC_SAFE_LPCTSTR( _T("&") ), __EXT_MFC_SAFE_LPCTSTR( _T("") ) );

	pCmdItem =
		g_CmdManager->CmdGetPtr(
			pApp->m_pszProfileName, ID_VIEW_UI_STYLE_XP );
	ASSERT( pCmdItem != NULL );
	pCmdItem->m_sToolbarText = pCmdItem->m_sMenuText;
	pCmdItem->m_sToolbarText.Replace( __EXT_MFC_SAFE_LPCTSTR( _T("&") ), __EXT_MFC_SAFE_LPCTSTR( _T("") ) );

	pCmdItem =
		g_CmdManager->CmdGetPtr(
			pApp->m_pszProfileName, ID_VIEW_UI_STYLE_2003 );
	ASSERT( pCmdItem != NULL );
	pCmdItem->m_sToolbarText = pCmdItem->m_sMenuText;
	pCmdItem->m_sToolbarText.Replace( __EXT_MFC_SAFE_LPCTSTR( _T("&") ), __EXT_MFC_SAFE_LPCTSTR( _T("") ) );
	
	if( !m_wndMenuBar.Create(
			NULL, // _T("Menu Bar"),
			this,
			ID_VIEW_MENUBAR
			)
		)
    {
        TRACE0("Failed to create menubar\n");
        return -1;      // failed to create
    }

	if(		(! m_wndToolBarStd.Create(
				_T("Standard ToolBar"), this, AFX_IDW_TOOLBAR
				) )
		||	(! m_wndToolBarStd.LoadToolBar(IDR_MAINFRAME) )
		)
	{
		TRACE0("Failed to create standard toolbar\n");
		return -1;      // fail to create
	}
	m_wndToolBarStd.InsertButton( -1, ID_SEPARATOR, FALSE );
	m_wndToolBarStd.InsertButton( -1, ID_VIEW_UI_STYLE_2003, FALSE );
	m_wndToolBarStd.InsertButton( -1, ID_VIEW_UI_STYLE_XP, FALSE );
	m_wndToolBarStd.InsertButton( -1, ID_VIEW_UI_STYLE_2K, FALSE );

	if(		(! m_wndToolBar256.Create(
				_T("256 Color (16x16 buttons)"), this, IDR_TOOLBAR_SMALL_256_COLOR
				) )
		||	(! m_wndToolBar256.LoadToolBar(IDR_TOOLBAR_SMALL_256_COLOR) )
		)
	{
		TRACE0("Failed to create 256-color toolbar\n");
		return -1;      // fail to create
	}

	if(		(! m_wndToolBarTrue.Create(
				_T("16777216 Color (44x40 buttons)"), this, IDR_TOOLBAR_BIG_TRUE_COLOR
				) )
		||	(! m_wndToolBarTrue.LoadToolBar(IDR_TOOLBAR_BIG_TRUE_COLOR) )
		)
	{
		TRACE0("Failed to create true-color toolbar\n");
		return -1;      // fail to create
	}
	
	if(		(! m_wndToolBarTruePlusText.Create(
				_T("Text + 16777216 Color (44x40 buttons)"), this, IDR_TOOLBAR_BIG_TRUE_COLOR2
				) )
		)
	{
		TRACE0("Failed to create true-color toolbar with text\n");
		return -1;      // fail to create
	}
	if(		(! m_wndToolBarTrueHot.Create(
				_T("Hot + 16777216 Color (44x40 buttons)"), this, IDR_TOOLBAR_BIG_TRUE_COLOR3
				) )
		)
	{
		TRACE0("Failed to create hot-true-color toolbar\n");
		return -1;      // fail to create
	}
int nCount = m_wndToolBarTrue.GetButtonsCount();
	for( int i = 0; i < nCount; i++ )
	{
		CExtBarButton * pTBB =
			m_wndToolBarTrue.GetButton( i );
		ASSERT_VALID( pTBB );
		if( pTBB->IsKindOf( RUNTIME_CLASS(CExtBarContentExpandButton) ) )
			continue;
		if( pTBB->IsSeparator() )
		{
			m_wndToolBarTruePlusText.InsertButton(
				-1,
				ID_SEPARATOR,
				FALSE
				);
			m_wndToolBarTrueHot.InsertButton(
				-1,
				ID_SEPARATOR,
				FALSE
				);
			continue;
		} // if( pTBB->IsSeparator() )
		CString strFunnyText( _T("") );
		switch( pTBB->GetCmdID() )
		{
		case ID_TRUE_FILE_NEW:
			strFunnyText = _T("New file\nentry ...");
			break;
		case ID_TRUE_FILE_OPEN:
			strFunnyText = _T("Open file\nentry ...");
			break;
		case ID_TRUE_FILE_FAVORITES:
			strFunnyText = _T("Organize\nfavorites");
			break;
		case ID_TRUE_FILE_ADD:
			strFunnyText = _T("Add\nitem");
			break;
		case ID_TRUE_FILE_EXTRACT:
			strFunnyText = _T("Extact\nfile");
			break;
		case ID_TRUE_FILE_VIEW:
			strFunnyText = _T("View\nselected");
			break;
		case ID_TRUE_FILE_CHECK_OUT:
			strFunnyText = _T("Check Out");
			break;
		case ID_TRUE_FILE_WIZARD:
			strFunnyText = _T("Wizard");
			break;
		} // switch( pTBB->GetCmdID() )
		CFunnyToolButton * pSpecTBB =
			new CFunnyToolButton(
				&m_wndToolBarTruePlusText,
				pTBB->GetCmdID(),
				(LPCTSTR)strFunnyText,
				-2.0f
				);
		m_wndToolBarTruePlusText.InsertSpecButton(
			-1,
			pSpecTBB,
			FALSE
			);
		pSpecTBB =
			new CFunnyToolButton(
				&m_wndToolBarTrueHot,
				pTBB->GetCmdID(),
				(LPCTSTR)strFunnyText,
				0.25
				);
		m_wndToolBarTrueHot.InsertSpecButton(
			-1,
			pSpecTBB,
			FALSE
			);
	} // for( int i = 0; i < nCount; i++ )
	m_wndToolBarTruePlusText.InitContentExpandButton();
	m_wndToolBarTrueHot.InitContentExpandButton();
	
	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}

	m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
	m_wndToolBarStd.EnableDocking(CBRS_ALIGN_ANY);
	m_wndToolBar256.EnableDocking(CBRS_ALIGN_ANY);
	m_wndToolBarTrue.EnableDocking(CBRS_ALIGN_ANY);
	m_wndToolBarTruePlusText.EnableDocking(CBRS_ALIGN_ANY);
	m_wndToolBarTrueHot.EnableDocking(CBRS_ALIGN_ANY);
	
	if( !CExtControlBar::FrameEnableDocking(this) )
	{
		ASSERT( FALSE );
		return -1;
	}

	if(	!CExtControlBar::ProfileBarStateLoad(
			this,
			pApp->m_pszRegistryKey,
			pApp->m_pszProfileName,
			pApp->m_pszProfileName,
			&m_dataFrameWP
			)
		)
	{
		DockControlBar( &m_wndMenuBar, AFX_IDW_DOCKBAR_TOP );
		DockControlBar( &m_wndToolBarStd, AFX_IDW_DOCKBAR_TOP );
		DockControlBar( &m_wndToolBar256, AFX_IDW_DOCKBAR_TOP );
		DockControlBar( &m_wndToolBarTrue, AFX_IDW_DOCKBAR_LEFT );
		DockControlBar( &m_wndToolBarTruePlusText, AFX_IDW_DOCKBAR_RIGHT );
		DockControlBar( &m_wndToolBarTrueHot, AFX_IDW_DOCKBAR_TOP );
	}

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
	cs.lpszClass = AfxRegisterWndClass(0);

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnSetFocus(CWnd* pOldWnd)
{
	pOldWnd;
	// forward focus to the view window
CView * pView = GetActiveView();
	if( pView != NULL )
		pView->SetFocus();
}

BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
	// let the view have first crack at the command
CView * pView = GetActiveView();
	if( pView != NULL )
	{
		if( pView->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo) )
			return TRUE;
	}
	// otherwise, do default handling
	return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}


void CMainFrame::ActivateFrame(int nCmdShow) 
{
	// window placement persistence
	if( m_dataFrameWP.showCmd != SW_HIDE )
	{
		SetWindowPlacement( &m_dataFrameWP );
		CFrameWnd::ActivateFrame( m_dataFrameWP.showCmd );
		m_dataFrameWP.showCmd = SW_HIDE;
		return;
	}
	
	CFrameWnd::ActivateFrame(nCmdShow);
}

BOOL CMainFrame::DestroyWindow() 
{
CWinApp * pApp = ::AfxGetApp();
	ASSERT( pApp != NULL );
	ASSERT( pApp->m_pszRegistryKey != NULL );
	ASSERT( pApp->m_pszRegistryKey[0] != _T('\0') );
	ASSERT( pApp->m_pszProfileName != NULL );
	ASSERT( pApp->m_pszProfileName[0] != _T('\0') );

	VERIFY(
		CExtControlBar::ProfileBarStateSave(
			this,
			pApp->m_pszRegistryKey,
			pApp->m_pszProfileName,
			pApp->m_pszProfileName
			)
		);
	g_CmdManager->ProfileWndRemove( GetSafeHwnd() );
	
	return CFrameWnd::DestroyWindow();
}

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
{
	if( m_wndMenuBar.TranslateMainFrameMessage(pMsg) )
		return TRUE;
	
	return CFrameWnd::PreTranslateMessage(pMsg);
}

void CMainFrame::OnAnyCommand()
{
}
void CMainFrame::OnUpdateAnyCommand( CCmdUI* pCmdUI )
{
	pCmdUI->Enable( 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 has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Architect Foss Software Inc
Ukraine Ukraine
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions