spiro.cpp

来自「《Visual C++ Bible》或者说是《Visual C++ 宝典》的对应」· C++ 代码 · 共 136 行

CPP
136
字号
// 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 + =
减小字号Ctrl + -
显示快捷键?