用Ellipse函数画圆 pDC->Ellipse(pt.x, pt.y, pt1.x+pt.x, pt1.y+pt.y); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这种方法不行啊,我试验过了,我也知道只要矩形的长等于宽就可以了。补充一下代码: CPoint RoundPoint[2]; for(int i = 0; i< size; i++) { RoundPoint[i] = m_PositionList.GetAt(i); } if(!m_strName.IsEmpty())//点的名字不为空的时候 { pDC->TextOut(10, 10, m_strName);//pos.x pos.y } CPoint pt, pt1; pt.x = RoundPoint[0].x; pt.y = RoundPoint[0].y; pt1.x = RoundPoint[1].x; pt1.y = RoundPoint[1].y; pDC->Ellipse(CRect(pt.x, pt.y, pt1.x+pt.x, pt1.y+pt.y)); Ellipse是用来画椭圆的,pDC->Ellipse(pt.x, pt.y, pt1.x+pt.x, pt1.y+pt.y)画出来的自然是一个椭圆 跟踪进去看看,哪个地方不对,可能是pt和pt1的值有问题`~~~~ Ellipse(x1,y1,x2,y2),你必须确保x2-x1==y2-y1,这样你画出的就是正圆,而不是椭圆了.像pDC->Ellipse(CRect(pt.x, pt.y, pt1.x+pt.x, pt1.y+pt.y));这里必须保证pt1.x==pt2.y才会是正圆 void CRoundGraph::Draw(CDC *pDC){ CPen pen(m_nLineStyle, m_nLineWidth, m_Color); CPen *pOldPen = pDC->SelectObject(&pen); int size = m_PositionList.GetSize(); if(size != 2) return; POINT RoundPoint[2]; CPoint RoundPoint[2]; for(int i = 0; i< size; i++) { RoundPoint[i] = m_PositionList.GetAt(i); } if(!m_strName.IsEmpty())//点的名字不为空的时候 { pDC->TextOut(10, 10, m_strName);//pos.x pos.y } CPoint pt, pt1; pt.x = RoundPoint[0].x; pt.y = RoundPoint[0].y; pt1.x = RoundPoint[1].x; pt1.y = RoundPoint[1].y; pDC->Ellipse(CRect( RoundPoint[0], RoundPoint[1])); if ((pt1.x-pt.x)==(pt1.y-pt1.y)) { pDC->Ellipse(CRect(pt.x, pt.y, pt1.x+pt.x, pt1.y+pt.y)); } pDC->SelectObject(pOldPen); return;}以上是我的完整程序啊,我试验了也不行啊。请那位大哥帮我看看 把pDC-> Ellipse(CRect(pt.x, pt.y, pt1.x+pt.x, pt1.y+pt.y)); 改为pDC-> Ellipse(CRect(pt.x, pt.y, pt1.x+pt.x, pt1.x+pt.y)); dshow数据流控制问题 CAD dxf写入的精度问题 关于coreldraw的曲线拟合算法。各位来讨论一下 MSHFLEXGRID在资源文件中占用的超大面积16进制值是否有办法减少或删除 请帮我看看这个问题怎么解决,谢谢 =========》 [完成端口] 一个很古怪的关于 “Socket close 和 reuse ”的问题 <============ ###发个大家都喜欢的 点击listctrl一项,如何得到该项值? 灰度图片叠加字符,变色? 请问如何才能学好汇编? OnDraw()函数中pDC和dc到底有什么区别? 求教vc++6.0是否支持CImage类??
补充一下代码: CPoint RoundPoint[2];
for(int i = 0; i< size; i++)
{
RoundPoint[i] = m_PositionList.GetAt(i); }
if(!m_strName.IsEmpty())//点的名字不为空的时候
{
pDC->TextOut(10, 10, m_strName);//pos.x pos.y
}
CPoint pt, pt1;
pt.x = RoundPoint[0].x;
pt.y = RoundPoint[0].y; pt1.x = RoundPoint[1].x;
pt1.y = RoundPoint[1].y;
pDC->Ellipse(CRect(pt.x, pt.y, pt1.x+pt.x, pt1.y+pt.y));
像pDC->Ellipse(CRect(pt.x, pt.y, pt1.x+pt.x, pt1.y+pt.y));这里必须保证pt1.x==pt2.y才会是正圆
{
CPen pen(m_nLineStyle, m_nLineWidth, m_Color);
CPen *pOldPen = pDC->SelectObject(&pen);
int size = m_PositionList.GetSize();
if(size != 2)
return; POINT RoundPoint[2];
CPoint RoundPoint[2];
for(int i = 0; i< size; i++)
{
RoundPoint[i] = m_PositionList.GetAt(i); }
if(!m_strName.IsEmpty())//点的名字不为空的时候
{
pDC->TextOut(10, 10, m_strName);//pos.x pos.y
}
CPoint pt, pt1;
pt.x = RoundPoint[0].x;
pt.y = RoundPoint[0].y; pt1.x = RoundPoint[1].x;
pt1.y = RoundPoint[1].y; pDC->Ellipse(CRect( RoundPoint[0], RoundPoint[1]));
if ((pt1.x-pt.x)==(pt1.y-pt1.y))
{
pDC->Ellipse(CRect(pt.x, pt.y, pt1.x+pt.x, pt1.y+pt.y));
}
pDC->SelectObject(pOldPen);
return;
}
以上是我的完整程序啊,我试验了也不行啊。
请那位大哥帮我看看
改为pDC-> Ellipse(CRect(pt.x, pt.y, pt1.x+pt.x, pt1.x+pt.y));