📄 myvc2view.cpp
字号:
// MyVC2View.cpp : implementation of the CMyVC2View class
//
#include "stdafx.h"
#include "MyVC2.h"
#include "MyVC2Doc.h"
#include "MyVC2View.h"
#include "math.h" // 添加MFC计算类头文件math.h预编译指令
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyVC2View
IMPLEMENT_DYNCREATE(CMyVC2View, CView)
BEGIN_MESSAGE_MAP(CMyVC2View, CView)
//{{AFX_MSG_MAP(CMyVC2View)
// 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()
/////////////////////////////////////////////////////////////////////////////
// CMyVC2View construction/destruction
CMyVC2View::CMyVC2View()
{
// TODO: add construction code here
}
CMyVC2View::~CMyVC2View()
{
}
BOOL CMyVC2View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMyVC2View drawing
void CMyVC2View::OnDraw(CDC* pDC)
{
CMyVC2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//设置逻辑坐标并调用各图形绘制子函数
CRect rect;
GetClientRect(&rect);
pDC->SetMapMode(MM_LOMETRIC);
pDC->SetViewportOrg(int(rect.right/2),int(rect.bottom/2));
FillRect0(pDC,RGB(192,192,192),(0,0),700,500);
Rectangle0(pDC,-700,0,0,-500,RGB(128,128,128));
Ellipses(pDC,-300,500,0,0,1,RGB(192,192,192),LTGRAY_BRUSH);
Ellipsem(pDC,-500,250,200,RGB(192,192,192));
Line0(pDC,-700,-500,700,-500,4,RGB(255,0,0));
Line0(pDC,-700,-500,700,500,4,RGB(0,255,0));
Ellipses(pDC,-500,350,500,-350,4,RGB(0,0,0),NULL_BRUSH);
Arc0(pDC,0,0,350,4,RGB(0,0,255));
Arcl(pDC,100,0,950,140,220,4,RGB(0,0,0));
Arcl(pDC,-100,0,950,-40,40,4,RGB(0,0,0));
}
/////////////////////////////////////////////////////////////////////////////
// CMyVC2View printing
BOOL CMyVC2View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMyVC2View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMyVC2View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMyVC2View diagnostics
#ifdef _DEBUG
void CMyVC2View::AssertValid() const
{
CView::AssertValid();
}
void CMyVC2View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMyVC2Doc* CMyVC2View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyVC2Doc)));
return (CMyVC2Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMyVC2View message handlers
// 画矩形填充图形子函数(不画边界线)
void CMyVC2View::FillRect0(CDC *pDC,COLORREF col,CPoint point,int chd,int kd)
{
CBrush newBrush(col);
CBrush *poldBrush;
poldBrush=pDC->SelectObject(&newBrush);
pDC->FillRect(CRect(point.x,point.y,point.x+chd,point.y+kd),&newBrush);
pDC->SelectObject(poldBrush);
newBrush.DeleteObject();
}
// 画矩形填充图形子函数(画边界线)
void CMyVC2View::Rectangle0(CDC *pDC,int x1,int y1,int x2,int y2,COLORREF col)
{
CBrush eiBrush;
CBrush *poldBrush;
CPen *poldPen;
poldPen=(CPen*)pDC->SelectStockObject(NULL_PEN);
eiBrush.CreateSolidBrush(col);
poldBrush=pDC->SelectObject(&eiBrush);
pDC->Rectangle(x1,y1,x2,y2);
pDC->SelectObject(poldPen);
pDC->SelectObject(poldBrush);
eiBrush.DeleteObject();
}
// 画直线子函数
void CMyVC2View::Line0(CDC *pDC,int x1,int y1,int x2,int y2,int siwid,COLORREF sicol)
{
CPen siPen;
CPen *poldPen;
siPen,CreatePen(PS_SOLID,siwid,sicol);
poldPen=pDC->SelectObject(&siPen);
pDC->MoveTo(x1,y1);
pDC->LineTo(x2,y2);
pDC->SelectObject(poldPen);
siPen.DeleteObject();
}
// 画椭圆线或椭圆面子函数
//void CMyVC2View::Ellipses(CDC *pCD,int x1,int y1,int x2,int y2,int w,COLORREF col,BOOL mb)
//{
// CPen eiPen;
// CPen *poldPen;
// CBrush *poldBrush;
// poldBrush=(CBrush*)pDC->SelectStockObject(mb);
// eiPen.CreatePen(PS_SOLID,w,col);
// poldPen=pDC->SelectObject(&eiPen);
// pDC->Ellipse(x1,y1,x2,y2);
// pDC->SelectObject(pOldPen);
// pDC->SelectObject(poldBrush);
// eiPen.DeleteObject();
//}
// 画圆线子函数
void CMyVC2View::Arc0(CDC *pDC,int xo,int yo,int Rre,int ew,COLORREF ecol)
{
CPen eiPen;
CPen *poldPen;
eiPen.CreatePen(PS_SOLID,ew,ecol);
poldPen=pDC->SelectObject(&eiPen);
pDC->Arc(xo-Rre,yo+Rre,xo+Rre,yo-Rre,0,0,0,0);
pDC->SelectObject(poldPen);
eiPen.DeleteObject();
}
// 画圆填充图形子函数
void CMyVC2View::Ellipsem(CDC *pDC,int xo,int yo,int Rre,COLORREF eicol)
{
CBrush eiBrush;
CBrush *poldBrush;
CPen *poldPen;
poldPen=(CPen*)pDC->SelectStockObject(NULL_PEN);
eiBrush.CreateSolidBrush(eicol);
poldBrush=pDC->SelectObject(&eiBrush);
pDC->Ellipse(xo-Rre,yo-Rre,xo+Rre,yo+Rre);
pDC->SelectObject(poldPen);
pDC->SelectObject(poldBrush);
eiBrush.DeleteObject();
}
// 画圆弧线段图形子函数
void CMyVC2View::Arcl(CDC *pDC,int xo,int yo,int re,double Ro,double Rd,int w,COLORREF col)
{
CPen eiPen;
CPen *poldPen;
double pxo,pyo,pxd,pyd,PI;
PI=3.1415;
pxo=re*cos(Ro*PI/180.0)+xo;pyo=re*sin(Ro*PI/180.0)+yo;
pxd=re*cos(Rd*PI/180.0)+xo;pyd=re*sin(Rd*PI/180.0)+yo;
eiPen.CreatePen(PS_SOLID,w,col);
poldPen=pDC->SelectObject(&eiPen);
//把设备环境的笔调换成新生成的笔,同时返回指向原设备环境的笔的指针
pDC->Arc((xo-re),(yo+re),(xo+re),(yo-re),int(pxo),int(pyo)int(pxd),int(pyd));
pDc->SelectObject(poldPen);
eiPen.DeleteObject();
}
//画五边形填充图形子函数
void CMyVC2View::Polygon0(CDC *pDC,int xo,int yo,COLORREF col)
{
CPont pt[6];
double Angle,PI;
CBrush goBrush;
CBrush*poldBrush;
CPen*poIdpen;
goBrush.CreateHatchBrush(HS_CROSS,col);
poIdBrush=pDC->selectObject(&goBrush);
//把设备环境的刷子调换新生成的刷子,同时返回指向原设备环境的刷子的指针
poIdPen=(CPen*)pDC-SelectStockObject(BLACK-PEN);
//在设备环境中分配一只黑色库笔,同时返回指向原设备环境的笔的指针
//该黑色笔用于画多边形的边界线,如果选透明库笔则不画边线
pDC->SetBkMode(TRANSPARENT);
PI=3.1415;
Angle=2.0*PI/5;
for(int i=0; i++){
pt[i].x=xo+int(sin(double(i)*Angle)*300;
pt[i].y=yo+int(cos(double(i)*Angle)*300;
}
PDC->Polygon(pt,5);
pDC->SelectObject(poldBrush);
goBrush.DeleteObject();
pDC->SelectObject(poldPen);
}
//画五角星填充图形子函数
void CMyVC2View::Polygonl(CDC *pDC,int xo,int yo,COLORREF col)
{
//参数意义:(xo,yo)---中心点坐标,coI---顔色
CPoint pt[6];
CBrush goBrush;
CBrush*pOIdBrush;
CPen*pOIdPen;
goBrush.CreatSolidBrush(coI);
pOIdBrush=pDC->SelectObject(&goBrush);
//把设备环境的刷子调换成新的刷子,同时反回指向原设备环境的刷子的指针
pOIdBrush=(cpen*)pDC->SelectStockObject(NULL_PEN);
//在设备环境中分配一只透明库笔,同时返回指向原设备环境的笔的指针
//该透明笔用于画多边形的边线,缺省状态下系统将黑笔画多边线
double Angle=(720.0/57/.295)5
for(int i=0; i<5;i++){
pt[i].xo+int(sin(double(i)*Angle)*300.0;
pt[t].y=yo+int(cos(double(i)*Angle)*300.0;
}
pDC->SetPolyFllMode(WINDING);
pDC->Ploygon(pt,5);
pDC->SelectObject(poldBrush);
goBrush.DeleteObject();
pDC->SelectObject(poldPen);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -