www.pudn.com > TreePropSheetEx.rar > PropPageFrame.cpp


/******************************************************************** 
* 
* Copyright (c) 2002 Sven Wiegand  
* 
* You can use this and modify this in any way you want, 
* BUT LEAVE THIS HEADER INTACT. 
* 
* Redistribution is appreciated. 
* 
* $Workfile:$ 
* $Revision: 1.4 $ 
* $Modtime:$ 
* $Author: ytkaczyk $ 
* 
* Revision History: 
*	$History:$ 
* 
*********************************************************************/ 
 
#include "stdafx.h" 
#include "PropPageFrame.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
 
 
namespace TreePropSheet 
{ 
 
 
//------------------------------------------------------------------- 
// class CPropPageFrame 
//------------------------------------------------------------------- 
 
CPropPageFrame::CPropPageFrame() 
:	m_bShowCaption(FALSE), 
	m_nCaptionHeight(0), 
	m_hCaptionIcon(NULL), 
	m_dwMsgFormat(DT_CENTER|DT_VCENTER|DT_NOPREFIX|DT_SINGLELINE) 
{ 
} 
 
 
CPropPageFrame::~CPropPageFrame() 
{ 
} 
 
 
///////////////////////////////////////////////////////////////////// 
// Operations 
 
 
void CPropPageFrame::ShowCaption(BOOL bEnable) 
{ 
	m_bShowCaption = bEnable; 
	SafeUpdateWindow(CalcCaptionArea()); 
} 
 
 
BOOL CPropPageFrame::GetShowCaption() const 
{ 
	return m_bShowCaption; 
} 
 
 
void CPropPageFrame::SetCaption(LPCTSTR lpszCaption, HICON hIcon /*= NULL*/) 
{ 
	m_strCaption = lpszCaption; 
	m_hCaptionIcon = hIcon; 
	SafeUpdateWindow(CalcCaptionArea()); 
} 
 
 
CString CPropPageFrame::GetCaption(HICON *pIcon /* = NULL */) const 
{ 
	if (pIcon) 
		*pIcon = m_hCaptionIcon; 
	return m_strCaption; 
} 
 
 
void CPropPageFrame::SetCaptionHeight(int nCaptionHeight) 
{ 
	m_nCaptionHeight = nCaptionHeight; 
	SafeUpdateWindow(CalcCaptionArea()); 
} 
 
 
int CPropPageFrame::GetCaptionHeight() const 
{ 
	return m_nCaptionHeight; 
} 
 
 
void CPropPageFrame::SetMsgText(LPCTSTR lpszMsg) 
{ 
	m_strMsg = lpszMsg; 
	SafeUpdateWindow(CalcMsgArea()); 
} 
 
 
CString CPropPageFrame::GetMsgText() const 
{ 
	return m_strMsg; 
} 
 
 
void CPropPageFrame::SetMsgFormat(DWORD dwFormat) 
{ 
	m_dwMsgFormat = dwFormat; 
	SafeUpdateWindow(CalcMsgArea()); 
} 
 
 
DWORD CPropPageFrame::GetMsgFormat() const 
{ 
	return m_dwMsgFormat; 
} 
 
 
///////////////////////////////////////////////////////////////////// 
// Overridable implementation helpers 
 
void CPropPageFrame::Draw(CDC *pDc) 
{ 
	if (GetShowCaption()) 
		DrawCaption(pDc, CalcCaptionArea(), m_strCaption, m_hCaptionIcon); 
	DrawMsg(pDc, CalcMsgArea(), m_strMsg, m_dwMsgFormat); 
} 
 
 
CRect CPropPageFrame::CalcMsgArea() 
{ 
	ASSERT(IsWindow(GetWnd()->GetSafeHwnd())); 
 
	CRect	rectMsg; 
	GetWnd()->GetClientRect(rectMsg); 
	if (GetShowCaption()) 
		rectMsg.top+= GetCaptionHeight(); 
 
	return rectMsg; 
} 
 
 
void CPropPageFrame::DrawMsg(CDC *pDc, CRect rect, LPCTSTR lpszMsg, DWORD dwFormat)  
{ 
  UNREFERENCED_PARAMETER(dwFormat); 
  UNREFERENCED_PARAMETER(lpszMsg); 
 
	CGdiObject* const pPrevFont = pDc->SelectStockObject(DEFAULT_GUI_FONT); 
	int		nPrevBkMode = pDc->SetBkMode(TRANSPARENT); 
 
	pDc->DrawText(GetMsgText(), rect, GetMsgFormat()); 
 
	pDc->SetBkMode(nPrevBkMode); 
	pDc->SelectObject(pPrevFont); 
} 
 
 
CRect	CPropPageFrame::CalcCaptionArea() 
{ 
	ASSERT(IsWindow(GetWnd()->GetSafeHwnd())); 
 
	CRect	rectCaption; 
	GetWnd()->GetClientRect(rectCaption); 
	if (!GetShowCaption()) 
		rectCaption.bottom = rectCaption.top; 
	else 
		rectCaption.bottom = rectCaption.top+GetCaptionHeight(); 
 
	return rectCaption; 
} 
 
 
void CPropPageFrame::DrawCaption(CDC *pDc, CRect rect, LPCTSTR lpszCaption, HICON hIcon)  
{ 
  UNREFERENCED_PARAMETER(pDc); 
  UNREFERENCED_PARAMETER(rect); 
  UNREFERENCED_PARAMETER(lpszCaption); 
  UNREFERENCED_PARAMETER(hIcon); 
 
	// should be implemented by specialized classes 
} 
 
 
///////////////////////////////////////////////////////////////////// 
// Implementation helpers 
 
void CPropPageFrame::SafeUpdateWindow(LPCRECT lpRect /* = NULL */) 
{ 
	if (!IsWindow(GetWnd()->GetSafeHwnd())) 
		return; 
 
	GetWnd()->InvalidateRect(lpRect, TRUE); 
} 
 
 
 
} //namespace TreePropSheet