📄 spiro.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 + -