
OldPen.CreatePen(PS_SOLID, 3, RGB(0, 0, 255))
CPoint p1, p2, p3
void CPenDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bLButtonDown=true
p1 = point
p2 = p1
}
void CPenDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
CClientDC dc(this)
dc.SelectObject(OldPen)
p2 = p1 - point
r = int(sqrt(p2.x * p2.x + p2.y * p2.y))//半径
//for (i = 0i <型迅陵 ri++)//圆内再画昌缓圆
//{
// r = (r--) - 3*i
for (p3.x = p1.x - r p3.x <= p1.x + rp3.x++)
{
for (p3.y = p1.y - rp3.y <= p1.y + rp3.y++)
{
l = int(sqrt((p3 - p1).cx * (p3 - p1).cx + (p3 - p1).cy * (p3 - p1).cy))
if (abs(l - r) <1)
{
dc.MoveTo(p3)
dc.LineTo(p3)
// Sleep(1)
}
}
}
/卜戚/ }
}
相关代码如下:
// 先在类中定义胡渣三个变量bool m_painting // 是否正在绘制
CPoint m_pointOri // 中心点
float m_radius // 半径 Cdemo98View::Cdemo98View()
{
m_painting = false
m_radius = 0
}
void Cdemo98View::OnDraw(CDC* pDC)
{
Cdemo98Doc* pDoc = GetDocument()
ASSERT_VALID(pDoc)
if (!pDoc)
return
pDC->Ellipse(m_pointOri.x - m_radius, m_pointOri.y - m_radius, m_pointOri.x + m_radius, m_pointOri.y + m_radius)
}
void Cdemo98View::OnLButtonDown(UINT nFlags, CPoint point)
{
m_pointOri = point
m_radius = 0
m_painting = true
}
void Cdemo98View::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_painting) {
// 计算当前点距离中心点距离也就是半径
m_radius = sqrt(pow(float(point.x - m_pointOri.x), 桥历2) + pow(float(point.y - m_pointOri.y), 2))
Invalidate()
}
}
void Cdemo98View::OnLButtonUp(UINT nFlags, CPoint point)
{
// 计算当前点距离中心点距离也就是半径
m_radius = sqrt(pow(float(point.x - m_pointOri.x), 2) + pow(float(point.y - m_pointOri.y), 2))
m_painting 裤消悄= false
Invalidate()
}
运行结果:
CDC::EllipseBOOL
Ellipse(
int
x1,
int
y1,
int
x2,
int
y2
)
BOOL
Ellipse(
LPCRECT
lpRect
)
所以,直接使用pDC->Ellipse(x1,y1,x2,y2)就可以了。
前两个参数为左上角的坐标
后两个胡磨参数为右下角的坐标
虽然是
椭圆函数
,关键是坐标的设置,设置成圆的游模就行了。扁的就是椭圆。裤磨斗
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)