繪圖基礎--畫弧,扇形,弓形
// arc.cpp
#include <afxwin.h>
#include <math.h>
// Define the application class
class CApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
CApp App;
// define the window class
class CWindow : public CFrameWnd
{
public:
CWindow();
void OnPaint();
DECLARE_MESSAGE_MAP()
};
// The window's constructor
CWindow::CWindow()
{
Create(NULL, "Drawing Tests",
WS_OVERLAPPEDWINDOW,
CRect(0,0,500,400));
}
// The message map
BEGIN_MESSAGE_MAP( CWindow, CFrameWnd )
ON_WM_PAINT()
END_MESSAGE_MAP()
// converts angle a to a point on rect r
CPoint Angle(CRect r, double a)
{
const double pi=3.1415926535;
//convert from degrees to radians
a = a * pi / 180.0;
// find the center of the ellipse
CPoint c = r.TopLeft();
c.Offset(r.Width()/2, r.Height()/2);
// find the point
c.Offset((int)(cos(a)*r.Width()/2),
(int)(-sin(a)*r.Height())/2);
return c;
}
// Handle exposure
void CWindow::OnPaint()
{
CRect rect;
GetClientRect( rect );
CPaintDC dc(this);
// Modify the pen and brush
CPen pen(PS_SOLID, 2, RGB(0,0,255)), *oldPen;
CBrush brush(RGB(255,0,0)), *oldBrush;
oldPen = dc.SelectObject(&pen);
oldBrush = dc.SelectObject(&brush);
rect.InflateRect(-20, -20);
// Drawn an arc, pie-wedge, and chor
dc.Arc(rect, Angle(rect, 0.0),
Angle(rect, 90.0));
dc.Pie(rect, Angle(rect, 90.0),
Angle(rect, 180.0));
dc.Chord(rect, Angle(rect, 180.0),
Angle(rect, 270.0));
dc.SelectObject(oldPen);
dc.SelectObject(oldBrush);
}
// Init the application
BOOL CApp::InitInstance()
{
m_pMainWnd = new CWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}