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 + -
显示快捷键?