📄 viewcutview.cpp
字号:
// viewcutView.cpp : implementation of the CViewcutView class
//
#include "stdafx.h"
#include "viewcut.h"
#include "viewcutDoc.h"
#include "viewcutView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CViewcutView
IMPLEMENT_DYNCREATE(CViewcutView, CView)
BEGIN_MESSAGE_MAP(CViewcutView, CView)
//{{AFX_MSG_MAP(CViewcutView)
ON_COMMAND(ID_Clear, OnClear)
ON_COMMAND(ID_Ellipse, OnEllipse)
ON_COMMAND(ID_Line, OnLine)
ON_COMMAND(ID_Rectangle, OnRectangle)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_COMMAND(ID_changecolor, Onchangecolor)
ON_COMMAND(ID_changefont, Onchangefont)
ON_COMMAND(ID_Brush, OnBrush)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CViewcutView construction/destruction
CViewcutView::CViewcutView()
{
drawflay=false;
drawtype=-1;
}
CViewcutView::~CViewcutView()
{
}
BOOL CViewcutView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CViewcutView drawing
void CViewcutView::OnDraw(CDC* pDC)
{
CViewcutDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString str;
str.Format("%6f",result);
pDC->TextOut(200,200,str);
CFont font;
//通过LOGFONT结构创建字体
font.CreateFontIndirect(&pDoc->logfont);
//将字体选入设备环境
CFont *oldfont=pDC->SelectObject(&font);
pDC->SetTextAlign(TA_CENTER);//可去除
//设置字体颜色
pDC->SetTextColor(pDoc->color);
pDC->TextOut(100,100,"太平天国");
OnBrush(pDC);
//恢复设备环境
pDC->SelectObject(oldfont);//可去除
//删除字体
font.DeleteObject();//可去除
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CViewcutView printing
BOOL CViewcutView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CViewcutView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CViewcutView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CViewcutView diagnostics
#ifdef _DEBUG
void CViewcutView::AssertValid() const
{
CView::AssertValid();
}
void CViewcutView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CViewcutDoc* CViewcutView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CViewcutDoc)));
return (CViewcutDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CViewcutView message handlers
void CViewcutView::OnClear()
{
Invalidate();
}
void CViewcutView::OnEllipse()
{
drawtype=2;
}
void CViewcutView::OnLine()
{
drawtype=0;
}
void CViewcutView::OnRectangle()
{
drawtype=1;
}
void CViewcutView::OnLButtonDown(UINT nFlags, CPoint point)
{
drawflay=true;
startpoint=endpoint=point;
CView::OnLButtonDown(nFlags, point);
}
void CViewcutView::OnLButtonUp(UINT nFlags, CPoint point)
{
drawflay=false;
startpoint=endpoint=point;
CView::OnLButtonUp(nFlags, point);
}
void CViewcutView::OnMouseMove(UINT nFlags, CPoint point)
{
CViewcutDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CClientDC dc(this);
dc.SetROP2(R2_NOTXORPEN);
CPen mypen;
mypen.CreatePen(PS_SOLID,3,pDoc->color);
dc.SelectObject(&mypen);
if(drawflay)
{
switch(drawtype)
{case 0:dc.MoveTo(startpoint);dc.LineTo(endpoint);endpoint=point;
dc.MoveTo(startpoint);dc.LineTo(endpoint);break;
case 1:dc.Rectangle(startpoint.x,startpoint.y,endpoint.x,endpoint.y);
endpoint=point;
dc.Rectangle(startpoint.x,startpoint.y,endpoint.x,endpoint.y);break;
case 2:dc.Ellipse(startpoint.x,startpoint.y,endpoint.x,endpoint.y);endpoint=point;
dc.Ellipse(startpoint.x,startpoint.y,endpoint.x,endpoint.y);break;
}
}
mypen.DeleteObject();
CView::OnMouseMove(nFlags, point);
}
void CViewcutView::Onchangecolor()
{
CViewcutDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//生成标准字体对话框
CColorDialog cd;
if(cd.DoModal()==IDOK)
{
//获取用户选择的颜色
pDoc->color=cd.GetColor();
}
}
void CViewcutView::Onchangefont()
{
CViewcutDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//生成标准字体对话框
CFontDialog cd;
if(cd.DoModal()==IDOK)
{
//获取用户选择的字体
cd.GetCurrentFont(&pDoc->logfont);
Invalidate();
}
}
void CViewcutView::OnBrush(CDC *pDC)
{
UINT i,pos,gap,width;
CRect rc;
GetClientRect(&rc);
pos=20;
gap=35;
width=rc.Width()-40;
CBrush br,*obr;
CViewcutDoc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
//使用6种花纹绘制圆角矩形
for(i=0;i<6;i++)
{ //创建一个带花纹的画刷
br.CreateHatchBrush(i,pDoc->color);
obr=pDC->SelectObject(&br); //将画刷选入设备环境
//绘制圆角矩形
pDC->RoundRect(pos,pos+i*gap,pos+width,pos+i*gap+30,pos+20,pos+20);
pDC->SelectObject(obr); //恢复原来的绘图设备环境
//删除画刷
br.DeleteObject();//由于下面还要调用br.CreateSolidBrush(),因此这一句代码是必须的
}
//最后使用实填充画刷绘制矩形
br.CreateSolidBrush(pDoc->color);
obr=pDC->SelectObject(&br);
pDC->RoundRect(pos,pos+i*gap,pos+width,pos+i*gap+30,pos+20,pos+20);
pDC->SelectObject(obr);
br.DeleteObject();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -