📄 szxscxjmview.cpp
字号:
// SZxscxjmView.cpp : implementation of the CSZxscxjmView class
//
#include "stdafx.h"
#include "SZxscxjm.h"
#include "SZxscxjmDoc.h"
#include "SZxscxjmView.h"
#include <cmath>
#define pi 2.0*asin(1.0)
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSZxscxjmView
IMPLEMENT_DYNCREATE(CSZxscxjmView, CView)
BEGIN_MESSAGE_MAP(CSZxscxjmView, CView)
//{{AFX_MSG_MAP(CSZxscxjmView)
ON_WM_TIMER()
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CSZxscxjmView construction/destruction
CSZxscxjmView::CSZxscxjmView()
{
// TODO: add construction code here
}
CSZxscxjmView::~CSZxscxjmView()
{
}
BOOL CSZxscxjmView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CSZxscxjmView drawing
void CSZxscxjmView::OnDraw(CDC* pDC)
{
CSZxscxjmDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
time = CTime::GetCurrentTime();
if(hour>12)
{
hour=hour-12;
}
sec = time.GetSecond();
min = time.GetMinute();
hour = time.GetHour();
//画上层透明位图
DrawTransparent(pDC,20,0,RGB(255,255,255));
SetTimer(1,1000,NULL);
}
/////////////////////////////////////////////////////////////////////////////
// CSZxscxjmView printing
BOOL CSZxscxjmView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CSZxscxjmView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CSZxscxjmView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CSZxscxjmView diagnostics
#ifdef _DEBUG
void CSZxscxjmView::AssertValid() const
{
CView::AssertValid();
}
void CSZxscxjmView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CSZxscxjmDoc* CSZxscxjmView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSZxscxjmDoc)));
return (CSZxscxjmDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSZxscxjmView message handlers
void CSZxscxjmView::DrawTransparent(CDC *pDC, int x, int y, COLORREF crColour)
{
CDC dc,dc1;
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
//IDB_BITMAP1是待显示位图的资源ID
BITMAP bm;bmp.GetBitmap(&bm);
int nWidth=bm.bmWidth,nHeight=bm.bmHeight;
dc1.CreateCompatibleDC(pDC);
dc.CreateCompatibleDC(pDC);
CBitmap* pOldBitmapImage=dc1.SelectObject(&bmp);
CBitmap bitmapMask;
bitmapMask.CreateBitmap(nWidth, nHeight, 1, 1, NULL);
CBitmap* pOldBitmapMask = dc.SelectObject(&bitmapMask);
dc1.SetBkColor(crColour);//crColor是位图中的透明色
dc.BitBlt(0, 0, nWidth, nHeight, &dc1, 0, 0, SRCCOPY);
pDC->BitBlt(x, y, nWidth, nHeight, &dc1, 0, 0, SRCINVERT);
pDC->BitBlt(x, y, nWidth, nHeight, &dc, 0, 0, SRCAND);
pDC->BitBlt(x, y, nWidth, nHeight, &dc1, 0, 0, SRCINVERT); //恢复原先设置
dc1.SelectObject(pOldBitmapImage);
dc.SelectObject(pOldBitmapMask);
}
void CSZxscxjmView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CDC *pDC=this->GetDC();
CRect m_rect;
this->GetClientRect(m_rect);
CRgn rgn;
HRGN m_hrgn;
m_hrgn = ::CreateEllipticRgn(64,40,186,165);
rgn.Attach(m_hrgn);
CBrush m_brush (1,RGB(255,255,255));
pDC->SelectClipRgn(&rgn,0);
pDC->FillRgn(&rgn,&m_brush);
int x=120;
int y=100;
pDC->MoveTo (x,y);
pDC->LineTo (x+(long)55*cos(pi/2-2*pi*sec/60.0),y-(long)55*sin(pi/2-2*pi*sec/60.0));
pDC->MoveTo (x,y);
pDC->LineTo (x+(long)45*cos(pi/2-2*pi*min/60.0),y-(long)45*sin(pi/2-2*pi*min/60.0));
pDC->MoveTo (x,y);
pDC->LineTo (x+(long)35*cos(pi/2-5*2*pi*hour/60.0),y-(long)35*sin(pi/2-5*2*pi*hour/60.0));
sec = sec+1;
if(sec==60)
{
sec=0;
min=min+1;
if(min==60)
{
min=0;
hour=hour+1;
}
}
CView::OnTimer(nIDEvent);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -