📄 xpeastereggview.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 + -