void CcgdemoView::TuanFill(CDC* pDC,int x,int y,int newcolor,int backgroundcolor)
{
int xx,yy;
int maskcode[8][8]={ 0,0,0,0,1,0,0,0, //砖缝图案
0,0,0,0,1,0,0,0,
0,0,0,0,1,0,0,0,
1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1};
xx=x%8; //多边形区域内点坐标x映射到图案坐标xx
yy=y%8; //多边形区域内点坐标y到图案坐标yy
if(maskcode[yy][xx])
pDC->SetPixel(x,y,newcolor); // newcolor 为前景色
else
pDC->SetPixel(x,y,backgroundcolor); // backgroundcolor为背景色
}
当我点下右键的好似后开始填充,为什么只有一个点,难道是没有循环的原因吗。
{
int xx,yy;
int maskcode[8][8]={ 0,0,0,0,1,0,0,0, //砖缝图案
0,0,0,0,1,0,0,0,
0,0,0,0,1,0,0,0,
1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1};
xx=x%8; //多边形区域内点坐标x映射到图案坐标xx
yy=y%8; //多边形区域内点坐标y到图案坐标yy
if(maskcode[yy][xx])
pDC->SetPixel(x,y,newcolor); // newcolor 为前景色
else
pDC->SetPixel(x,y,backgroundcolor); // backgroundcolor为背景色
}
当我点下右键的好似后开始填充,为什么只有一个点,难道是没有循环的原因吗。
void TuanFill(CDC* pDC,int x,int y,int newcolor,int backgroundcolor)
{
int xx,yy;
int maskcode[8][8]={
0,0,0,0,1,0,0,0, //砖缝图案
0,0,0,0,1,0,0,0,
0,0,0,0,1,0,0,0,
1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1};
xx=x/8; //不是 模 '%'
yy=y/8;
for(int jj=0;jj<xx;jj++)
{
for(int kk=0;kk<yy;kk++)
{
if(maskcode[jj][kk])
pDC->SetPixel(jj,kk,newcolor); // newcolor 为前景色
else
pDC->SetPixel(jj,kk,backgroundcolor); // backgroundcolor为背景色
}
}
}
TuanFill(pDC,400,400,0xFF,0xFFFFF);
{
int xx,yy;
int maskcode[8][8]={
0,0,0,0,1,0,0,0, //砖缝图案
0,0,0,0,1,0,0,0,
0,0,0,0,1,0,0,0,
1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1};
//
for(xx=0;xx<x;xx++)
{
for(yy=0;yy<y;yy++)
{
if(maskcode[yy%8][xx%8])
pDC->SetPixel(xx,yy,newcolor); // newcolor 为前景色
else
pDC->SetPixel(xx,yy,backgroundcolor); // backgroundcolor为背景色
}
}
}调用:
CRect rc;
GetClientRect(&rc);
TuanFill(pDC,rc.Width(),rc.Height(),0x0000FF00,0xFFFFFF00);
起点没有指定(=0)。
这个要求可高多了,要自己实现‘填充’算法的。
“x,y传过来的是当前鼠标右键点击的点”干什么用的,多边形不是有了吗?