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为背景色
}
当我点下右键的好似后开始填充,为什么只有一个点,难道是没有循环的原因吗。

解决方案 »

  1.   


    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为背景色
    }
    }
    }
      

  2.   

    调用:
    TuanFill(pDC,400,400,0xFF,0xFFFFF);
      

  3.   

    因为我是在右键点下是作为种子点,然后实现图案填充,你这个是jj,kk还跑到圆点去了啊。因为我是先自己鼠标左键画出多边形,然后再多边形内右键点击实现填充。填充整个多边形。你的这个不能实现,非常感谢你的回答。
      

  4.   

    昨天的代码有问题(程序‘目的’是猜的)。改了一下: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};
    //
    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);
      

  5.   

    int x,int y是宽度。
    起点没有指定(=0)。
      

  6.   

    “我的x,y传过来的是当前鼠标右键点击的点,我先通过鼠标左键画出多边形,然后再多边形内右键点击一下实现填充。”
    这个要求可高多了,要自己实现‘填充’算法的。
    “x,y传过来的是当前鼠标右键点击的点”干什么用的,多边形不是有了吗?
      

  7.   

    不知道是我没讲清楚吧,谢谢你的回答。当前鼠标传过来的就是种子点,就是我右键点击的点,假如我点击多边形的中间,则要实现上下左右的填充。多边形是自己任意画的。也就是要让x,y实现上下左右加减,送给xx,yy。判断该填什么像素。