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

📄 spiro.cpp

📁 《Visual C++ Bible》或者说是《Visual C++ 宝典》的对应的源码文件
💻 CPP
字号:
// Spiro.cpp : Implementation of CSpiro
#include "stdafx.h"
#include "SpiroGrph.h"
#include "Spiro.h"

/////////////////////////////////////////////////////////////////////////////
// CSpiro

#include <math.h>

HRESULT CSpiro::OnDraw(ATL_DRAWINFO& di)
{
	int x = 0;
	int y = 0;
	int prevx;
	int prevy;
	int t;
	int nCenterX, nCenterY;

	HPEN hOldPen, hPen;
	hPen = CreatePen( PS_SOLID, 1,
		RGB( m_Red, m_Green, m_Blue ) );
	hOldPen = (HPEN) SelectObject( di.hdcDraw, hPen );

	nCenterX =
		( di.prcBounds->right - di.prcBounds->left ) / 2;
	nCenterY =
		( di.prcBounds->bottom - di.prcBounds->top ) / 2;

	for( t=0; t<=m_nIterations; t++ ){
		prevx = x;
		prevy = y;

		x = (int) ( (double) ( R + r ) *
				cos( (double) t ) -
			(double) ( r + O ) *
				cos( (double) ( ( ( R + r ) / r ) * t ) ) );
		y = (int) ( (double) ( R + r ) *
				sin( (double) t ) -
			(double) ( r + O ) *
				sin( (double) ( ( ( R + r ) / r ) * t ) ) );

		if( t > 0 ){
			MoveToEx( di.hdcDraw,
				prevx + nCenterX,
				prevy + nCenterY, NULL );
			LineTo( di.hdcDraw,
				x + nCenterX, y + nCenterY );
			}
		}

	SelectObject( di.hdcDraw, hOldPen );
	DeleteObject( hPen );

	return S_OK;

}

HRESULT CSpiro::Draw( int dc )
{
	int x = 0;
	int y = 0;
	int prevx;
	int prevy;
	int t;
	int nCenterX, nCenterY;
	HDC hDC;

	HPEN hOldPen, hPen;
	RECT prcBounds;

	hDC = (HDC ) dc;
	GetClientRect( &prcBounds );

	hPen = CreatePen( PS_SOLID, 1,
		RGB( m_Red, m_Green, m_Blue ) );
	hOldPen = (HPEN) SelectObject( hDC, hPen );

	nCenterX =
		( prcBounds.right - prcBounds.left ) / 2;
	nCenterY =
		( prcBounds.bottom - prcBounds.top ) / 2;

	for( t=0; t<=m_nIterations; t++ ){
		prevx = x;
		prevy = y;

		x = (int) ( (double) ( R + r ) *
				cos( (double) t ) -
			(double) ( r + O ) *
				cos( (double) ( ( ( R + r ) / r ) * t ) ) );
		y = (int) ( (double) ( R + r ) *
				sin( (double) t ) -
			(double) ( r + O ) *
				sin( (double) ( ( ( R + r ) / r ) * t ) ) );

		if( t > 0 ){
			MoveToEx( hDC,
				prevx + nCenterX,
				prevy + nCenterY, NULL );
			LineTo( hDC,
				x + nCenterX, y + nCenterY );
			}
		}

	SelectObject( hDC, hOldPen );
	DeleteObject( hPen );

	return S_OK;

}

HRESULT CSpiro::SetRadius( int nRadius )
{

	r = nRadius;
	InvalidateRect( NULL, FALSE );
	UpdateWindow();

	return S_OK;

}

HRESULT CSpiro::SetColor( long color )
{

	m_Red = (unsigned char) ( color >> 16 );
	m_Green = (unsigned char) ( ( color & 0x00ff00 ) >> 8 );
	m_Blue = (unsigned char) ( color & 0x0000ff );
	InvalidateRect( NULL, FALSE );
	UpdateWindow();

	return S_OK;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -