📄 triangleview.cpp
字号:
// TriangleView.cpp : implementation of the CTriangleView class
//
#include "stdafx.h"
#include "Triangle.h"
#include "TriangleDoc.h"
#include "TriangleView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "math.h"
#include "PTriangle.h"
/////////////////////////////////////////////////////////////////////////////
// CTriangleView
IMPLEMENT_DYNCREATE(CTriangleView, CView)
BEGIN_MESSAGE_MAP(CTriangleView, CView)
//{{AFX_MSG_MAP(CTriangleView)
// 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
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTriangleView construction/destruction
CTriangleView::CTriangleView()
{
// TODO: add construction code here
}
CTriangleView::~CTriangleView()
{
}
BOOL CTriangleView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CTriangleView drawing
void CTriangleView::OnDraw(CDC* pDC)
{
//内存设备及其初始化
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(pDC, 500, 400);
CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
CBrush* pBrush = new CBrush(RGB(255, 255, 255));
CRect rect(0, 0, 500, 400);
memDC.FillRect(rect, pBrush);
delete pBrush;
//顶点, 位于圆上
CPoint aVertex[7];
int i;
for(i = 0;i < 6;i++)
{
int x = (int) (90 * cos(1.0472f * i));
int y = -(int)(90 * sin(1.0472f * i));
aVertex[i].x = (100 + x);
aVertex[i].y = (120 + y);
}
aVertex[6].x = 100;
aVertex[6].y = 120;
//各顶点颜色
FLOATCOLORRGB aColor[7] = {{1.0f, 0.0f, 0.0f},
{1.0f, 1.0f, 0.0f}, {0.0f, 1.0f, 0.0f},
{0.0f, 0.0f, 1.0f}, {1.0f, 0.0f, 1.0f},
{0.0f, 1.0f, 1.0f}, {1.0f, 1.0f, 1.0f}};
//三角形基元
CPTriangle pt;
//Gouraud光滑明暗着色处理
for(i = 0;i < 6; i++)
{
pt.Gouraud(&memDC, aVertex[6], aVertex[i], aVertex[((i + 1) % 6)],
aColor[6], aColor[i], aColor[((i + 1) % 6)]);
}
//平移顶点
for(i = 0;i < 7; i++)aVertex[i].Offset(200, 0);
//平面明暗着色处理
for(i = 0;i < 6; i++)
{
pt.Flat(&memDC, aVertex[6], aVertex[i], aVertex[((i + 1) % 6)],
RGB((BYTE)(aColor[i].red * 255.0f),
(BYTE)(aColor[i].green * 255.0f), (BYTE)(aColor[i].blue * 255.0f)));
}
pDC->BitBlt(0, 0, 500, 400, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBitmap);
bitmap.DeleteObject();
}
/////////////////////////////////////////////////////////////////////////////
// CTriangleView diagnostics
#ifdef _DEBUG
void CTriangleView::AssertValid() const
{
CView::AssertValid();
}
void CTriangleView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTriangleDoc* CTriangleView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTriangleDoc)));
return (CTriangleDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTriangleView message handlers
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -