MFC怎么画圆,不是椭圆,谢谢啊

MFC怎么画圆,不是椭圆,谢谢啊,第1张

CPen OldPen,

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::Ellipse

BOOL

Ellipse(

int

x1,

int

y1,

int

x2,

int

y2

)

BOOL

Ellipse(

LPCRECT

lpRect

)

所以,直接使用pDC->Ellipse(x1,y1,x2,y2)就可以了。

前两个参数为左上角的坐标

后两个胡磨参数为右下角的坐标

虽然是

椭圆函数

,关键是坐标的设置,设置成圆的游模就行了。扁的就是椭圆。裤磨斗


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12336138.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存