?? 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
//設置邏輯坐標并調用各圖形繪制子函數(shù)
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
// 畫矩形填充圖形子函數(shù)(不畫邊界線)
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();
}
// 畫矩形填充圖形子函數(shù)(畫邊界線)
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();
}
// 畫直線子函數(shù)
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();
}
// 畫橢圓線或橢圓面子函數(shù)
//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();
//}
// 畫圓線子函數(shù)
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();
}
// 畫圓填充圖形子函數(shù)
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();
}
// 畫圓弧線段圖形子函數(shù)
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);
//把設備環(huán)境的筆調換成新生成的筆,同時返回指向原設備環(huán)境的筆的指針
pDC->Arc((xo-re),(yo+re),(xo+re),(yo-re),int(pxo),int(pyo)int(pxd),int(pyd));
pDc->SelectObject(poldPen);
eiPen.DeleteObject();
}
//畫五邊形填充圖形子函數(shù)
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);
//把設備環(huán)境的刷子調換新生成的刷子,同時返回指向原設備環(huán)境的刷子的指針
poIdPen=(CPen*)pDC-SelectStockObject(BLACK-PEN);
//在設備環(huán)境中分配一只黑色庫筆,同時返回指向原設備環(huán)境的筆的指針
//該黑色筆用于畫多邊形的邊界線,如果選透明庫筆則不畫邊線
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);
}
//畫五角星填充圖形子函數(shù)
void CMyVC2View::Polygonl(CDC *pDC,int xo,int yo,COLORREF col)
{
//參數(shù)意義:(xo,yo)---中心點坐標,coI---顔色
CPoint pt[6];
CBrush goBrush;
CBrush*pOIdBrush;
CPen*pOIdPen;
goBrush.CreatSolidBrush(coI);
pOIdBrush=pDC->SelectObject(&goBrush);
//把設備環(huán)境的刷子調換成新的刷子,同時反回指向原設備環(huán)境的刷子的指針
pOIdBrush=(cpen*)pDC->SelectStockObject(NULL_PEN);
//在設備環(huán)境中分配一只透明庫筆,同時返回指向原設備環(huán)境的筆的指針
//該透明筆用于畫多邊形的邊線,缺省狀態(tài)下系統(tǒng)將黑筆畫多邊線
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 + -