怎样填充五角星内的区域为红色?

sdhzzzzcd 2005-03-23 01:14:35
各位高手:

我已用MoveTo,LineTo 方法画出了五角星,请问怎样填充五角星内的区域为红色?谢谢!
...全文
314 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiu123fly 2005-03-26
  • 打赏
  • 举报
回复
小问题,数组本身就是指针!
crgn.CreatePolygonRgn(&POINT,5,ALTERNATE)中参数有问题

改为:
crgn.CreatePolygonRgn(POINT,5,ALTERNATE);
即可
你这样画出来的是五边形!
我的代码如下:
int mPoiNum = 10 ;
CPoint mOgn ;
mOgn.x = 250 ;
mOgn.y = 250 ;
int i, j ;
double mAngle, mX, mY, mR = 100.0, PI, a, b ;
PI = 3.1416 ;
b = 2 * cos(PI*0.2) ;
a = 1.0 ;
// 计算五角星的边缘上各个点的坐标
for( i=0 ; i<5 ; i++ )
{
mAngle = PI * 0.4 * i ;
mX = mR * sin(mAngle) ;
mY = mR * cos(mAngle) ;
mPoint[i*2].x = (int)mX ;
mPoint[i*2].y = (int)mY ;
}
for( i=0 ; i<5 ; i++ )
{
if( i+2 < 5 )
j = i + 2 ;
else if( i+2 >= 5 )
j = i - 3 ;
mX = ( mPoint[i*2].x * (a+b) + mPoint[j*2].x * b ) / (2*a+b) ;
mY = ( mPoint[i*2].y * (a+b) + mPoint[j*2].y * b ) / (2*a+b) ;
mPoint[i*2 + 1].x = (int) mX ;
mPoint[i*2 + 1].y = (int) mY ;
}
for( i=0 ; i<10 ; i++ )
{
mPoint[i].x = mOgn.x + mPoint[i].x ;
mPoint[i].y = mOgn.y - mPoint[i].y ;
}
myPolyRgn.CreatePolygonRgn(mPoint, mPoiNum, ALTERNATE) ;
CBrush *oldBrush ;
CBrush myBrush(RGB(255,0,0)) ;
int i ;
pDC->MoveTo(mPoint[9]) ;
for( i=0 ; i<10 ; i++ )
{
pDC->LineTo(mPoint[i]) ;
pDC->MoveTo(mPoint[i]) ;
}
oldBrush = pDC->SelectObject(&myBrush) ;
pDC->FillRgn(&myPolyRgn, &myBrush) ;
OK!

sdhzzzzcd 2005-03-23
  • 打赏
  • 举报
回复
什么意思?不太明白,麻烦说清楚一点,谢谢!
sboom 2005-03-23
  • 打赏
  • 举报
回复
种子填充算法。。。。。
UDX协议 2005-03-23
  • 打赏
  • 举报
回复
CRgn crgn;
还要调用crgn.create
sdhzzzzcd 2005-03-23
  • 打赏
  • 举报
回复
麻烦二楼的大哥讲详细一点好吗?
m_star=30;
CPoint POINT[5];
POINT[0]=((int)(xCenter+m_star*cos(PI/10)),(int)(yCenter-m_star*sin(PI/10)));
POINT[1]=((int)(xCenter-m_star*cos(PI/10)),(int)(yCenter-m_star*sin(PI/10)));
POINT[2]=((int)(xCenter+m_star*cos(3*PI/10)),(int)(yCenter+m_star*sin(3*PI/10)));
POINT[3]=((int)xCenter,(int)(yCenter-m_star));
POINT[4]=((int)(xCenter-m_star*cos(3*PI/10)),(int)(yCenter+m_star*sin(3*PI/10)));
CRgn crgn;
HRGN hRgn=NULL;

hRgn=crgn.operator HRGN();
CRgn *pRGN=CRgn::FromHandle(hRgn);
crgn.CreatePolygonRgn(&POINT,5,ALTERNATE);

pDC->FillRgn(pRGN,&m_brush);
DeleteObject(hRgn);
我用这段代码怎么不行呢?麻烦各位大哥给指点指点!!!
flyjzy5 2005-03-23
  • 打赏
  • 举报
回复
楼上方法好
I_Love_CPP 2005-03-23
  • 打赏
  • 举报
回复
用CRgn:
CRgn::CreatePolygonRgn

然后用CDC::FillRgn

BOOL FillRgn(
CRgn* pRgn,
CBrush* pBrush
);

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧