⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpeastereggview.cpp

📁 最新visualC++编程200例书籍源码包括对数据库的操作
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////
//类名:CXPEasterEggView
//功能:视图操作类
//作者:徐景周(jingzhou_xu@163.net)
//组织:未来工作室(Future Studio)
//日期:2002.8.1
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "XPEasterEgg.h"

#include "XPEasterEggDoc.h"
#include "XPEasterEggView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CXPEasterEggView

IMPLEMENT_DYNCREATE(CXPEasterEggView, CView)

BEGIN_MESSAGE_MAP(CXPEasterEggView, CView)
	//{{AFX_MSG_MAP(CXPEasterEggView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CXPEasterEggView construction/destruction

CXPEasterEggView::CXPEasterEggView()
{
	// TODO: add construction code here

}

CXPEasterEggView::~CXPEasterEggView()
{
}

BOOL CXPEasterEggView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CXPEasterEggView drawing
// ---------------------------------------------------------------------------
// 名称:  OnDraw
// 功能:  填充背景色及绘制3D文字LOGO
// 作者:  徐景周(jingzhou xu)
// 组织:  未来工作室(Future Studio)
// ---------------------------------------------------------------------------
void CXPEasterEggView::OnDraw(CDC* pDC)
{
	CXPEasterEggDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	//新建图件时,填充默认底色
	CRect rcClient;
	pDC->GetClipBox(rcClient);			//获取需刷新的逻辑坐标区域
	rcClient.NormalizeRect();
	if (rcClient.IsRectEmpty())			//不需刷新时直接返回
		return;

	//绘制客户区的底色
	CBrush	brush;
	brush.CreateSolidBrush(0x808080);
	pDC->FillRect(rcClient, &brush);
	brush.DeleteObject();

	//绘制3D文字Logo
	CFont m_LogoFont;
	CString sLogoString;
		
	m_LogoFont.CreateFont(36, 0, 0, 0, FW_BOLD, 1, FALSE, FALSE,
			DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
			FIXED_PITCH | FF_ROMAN, "楷体_GB2312");
		
	sLogoString = "未来工作室";
		
	RECT rect,m_rDataBox;
	GetClientRect(&rect);
	CopyRect(&m_rDataBox,&rect);
		
	TEXTMETRIC tm;
	pDC->GetTextMetrics(&tm);
	CFont* oldFont = pDC->SelectObject(&m_LogoFont);
	CSize sz = pDC->GetTextExtent(sLogoString, sLogoString.GetLength());

	//用GetTextExtent来计算字体logo大小,依靠于设备环境,使用logo位于右下角
	m_rDataBox.left = m_rDataBox.right  - sz.cx - tm.tmAveCharWidth/2;
	m_rDataBox.top  = m_rDataBox.bottom - sz.cy - tm.tmHeight/5;
	pDC->SetBkMode(TRANSPARENT);

	//用3D字体显示,先黑后白,最后再用默认色
	COLORREF oldColor = pDC->SetTextColor(GetSysColor(COLOR_3DDKSHADOW));
	pDC->DrawText(sLogoString, sLogoString.GetLength(), &m_rDataBox, DT_VCENTER | DT_SINGLELINE | DT_CENTER);
	m_rDataBox.left -= tm.tmAveCharWidth;
	pDC->SetTextColor(GetSysColor(COLOR_3DHILIGHT));
	pDC->DrawText(sLogoString, sLogoString.GetLength(), &m_rDataBox, DT_VCENTER | DT_SINGLELINE | DT_CENTER);
	m_rDataBox.left += 3*tm.tmAveCharWidth/5;
	pDC->SetTextColor(RGB(0,0,255));
	pDC->DrawText(sLogoString, sLogoString.GetLength(), &m_rDataBox, DT_VCENTER | DT_SINGLELINE | DT_CENTER);
		
	//释放资源
	pDC->SelectObject(oldFont);
	pDC->SetTextColor(oldColor);   
	m_LogoFont.DeleteObject();
}

/////////////////////////////////////////////////////////////////////////////
// CXPEasterEggView printing

BOOL CXPEasterEggView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CXPEasterEggView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CXPEasterEggView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CXPEasterEggView diagnostics

#ifdef _DEBUG
void CXPEasterEggView::AssertValid() const
{
	CView::AssertValid();
}

void CXPEasterEggView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CXPEasterEggDoc* CXPEasterEggView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CXPEasterEggDoc)));
	return (CXPEasterEggDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CXPEasterEggView message handlers

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -