⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 triangleview.cpp

📁 visual c++数字图像与图形处理中的光盘内容
💻 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 + -